说到深浅拷贝,Python和其他语言一样也涉及到内存分配问题,对象的赋值和拷贝有很大差别,赋值是把变量和内存某块连接关联关系,变量存储值的地址,但是本质上来说,两个变量指向同一块内存地址,所以当一个变量改变了内存里的值时,另一个变量的值也会发生变化。
拷贝是另外开辟一块内存地址,然后把值也赋值一份,这时两个变量不存在关联关系,当其中一个变量的值改变时,另一个变量的值不会发生变化。
当然拷贝中还有一些区别的,分为深拷贝和浅拷贝:
浅拷贝(copy):
所谓浅拷贝既是只对第一级内存进行重新开辟空间,对它级联的内存用新开辟的空间指向它,所以如果使用浅拷贝如果改变对象的级联的二级对象或更高级的对象,拷贝后的二级对象或者更高级的对象也会改变
深拷贝(deepcopy):
所谓深拷贝,是和浅拷贝相对的一种拷贝方式,既是深拷贝会对对象的二级或更高级对象进行迭代拷贝,用内存空间讲就是为对象及其子对象都分别开辟空间,然后赋值,则经过深拷贝后的对象与原对象毫无关系。
eg:
import copy
a=[1,2,3,[4,5,6],7]
b=copy.copy(a)
print(b) 这时输出的是[1,2,3,[4,5,6],7]
a[3].append(50)
print(b) 这时输出的是[1,2,3,[4,5,6,50],7]
c=copy.deepcopy(a)
print(b) 这时输出的是[1,2,3,[4,5,6],7]
a[3].append(60)
print(b) 这时输出的是[1,2,3,[4,5,6],7]
网友评论