Python培训
400-996-5531
首先来看一段代码:
代码1
list1= [1,2,3,4]
list2 = list1
list1.append(5)
print list2 #结果[1, 2, 3, 4, 5]
这是为什么呢? 我只改了list1,为什么list2也跟着改变了呢?
在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用.
有人不禁会问,为什么字符串赋值后,再更改,不会发生着种情况,答案是字符串是不可变的,你更改了等于重写引用的其他的内存地址,c程序员立刻想到了指针..
我们也可以用id()内置函数查看对象的内存地址
直接的赋值,原始对象改变,被复赋值的对象也随之改变,如文章开始的代码1
那么如何才能达到我们想要的结果呢
浅复制
不会复制子对象
import copy
list1 = [1,2,3,4,["a","b"]]
list2 = copy.copy(list1)
list1.append(5)
print list2 #[1, 2, 3, 4, ['a', 'b']] 未改变
list1[-2].append("c") #更改["a","b"]
print list2 #[1, 2, 3, 4, ['a', 'b', 'c']]被改变
深复制
子对象也会连同复制
import copy
list1 = [1,2,3,4,["a","b"]]
list2 = copy.deepcopy(list1)
list1.append(5)
print list2 #[1, 2, 3, 4, ['a', 'b']] 未改变
list1[-2].append("c") #更改["a","b"]
print list2 #[1, 2, 3, 4, ['a', 'b']] 依然未改变
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved