python赋值、深浅拷贝的区别

1、复制与拷贝

赋值是对对象的引用,而深浅拷贝是创建一个新的对象

将a赋值给b,a,b的地址完全一致,说明a,b仍然是同一个对象,只是起了个别名而已

而copy_a,deepcopy_a与a的地址都不一致,说明copy_a,deepcopy_a是重新开辟了地址空间存放新的对象。

所以,对b的操作等同于对a的操作,而无论是深度拷贝还是浅度拷贝,对新对象的操作不会影响到原对象(对象不存在子对象)


2、深度拷贝与浅度拷贝

当对象存在子对象时,浅度拷贝只会拷贝父对象,而对于子对象,则只会拷贝id;

而深度拷贝则会递归查找子对象的内容,并重新开辟空间存储一份,然后赋值给新的对象

浅度拷贝时,对新对象copy_a的第一层的添加值4时,原对象a没有受影响;而对子对象添加值44时,a也同时添加了值44。

深度拷贝时,对新对象deepcopy_a的第一层添加值5和对子对象添加值55,都没有影响原对象a。

所以,浅度拷贝只拷贝了父对象以及子对象的ID,子对象拷贝实际是引用;而深度拷贝会将父对象和子对象完全拷贝,新对象与原对象完全独立

猜你喜欢

转载自blog.csdn.net/kk_gods/article/details/110196156