01-Python深拷贝与浅拷贝
作者:互联网
对象的引用
在c语言中,创建一个变量a并且初始化,系统会分配一个空间给a。这时如果令b=a;那么系统会开辟另一个新的空间给b并且把原变量的值原封不动地复制过去。
而在Python中,变量名都是引用。a,b都是指向这个对象[11, 22],并没有开辟新的空间。
拷贝
导入copy模块,深拷贝deepcopy,浅拷贝copy
浅拷贝
b=copy.copy(a)创建一个a的浅拷贝对象,我们可以使用id(b),id(a)来查看内存的地址。
可以看到,a和b的id其实是不一样的。因此浅拷贝开辟了新的空间给b,而且数据也复制了一份。
但此时有个问题,我们如果在一个列表c中添加两个对象a.b呢,这时候浅拷贝的对象,究竟是下面哪两种情况呢?
- e开辟了新的空间,但是内部仍然指向a,b两个对象
- e开辟了新的空间,而且把a,b完全复制了一份
经过改变a和b列表的值验证,我们发现e对象中的数据也随之改变。所以结论应该是前者。
深拷贝
如图,c,d的id不同,而且改变a后d并没有受到影响,因此深拷贝就是将数据完全拷贝了一份。
注意:元组
- 对于一个元组(2,3)里面的类型均为不可变来说,无论深拷贝和浅拷贝都不会改变自己,因为元组本身就是不可变类型。即只会引用指向。
- 而对于元组([2,3],[1,4])里面有可变类型来说,浅拷贝仍然是指向,而深拷贝还是深拷贝。
标签:开辟,01,Python,元组,对象,拷贝,copy,id 来源: https://blog.csdn.net/Nebularr/article/details/104442517