浅拷贝和深拷贝的概念
浅拷贝:
浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。即默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。
深拷贝:
深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。深拷贝相比于浅拷贝速度较慢并且花销较大。
在python中
浅拷贝(copy()):拷贝父对象,不会拷贝对象内部的子对象。
深拷贝(deepcopy()):完全拷贝了子对象和父对象。
import copy
list01 = [1, [10, 20]]
list02 = list01[:]
list03 = copy.deepcopy(list01)
list02[1][0] = 100
list02[0] = 2
print(list01)
print(list02)
print(list03)
总结
浅拷贝只是复制了对象的引用,并不是复制对象本身,和原对象共用内存,而深拷贝会生成一个新对象,与原对象互不影响。