Python深拷贝与浅拷贝
浅拷贝就是对引用的拷贝,深拷贝就是对对象资源的拷贝。1.赋值
1.赋值是将一个对象的地址赋值给一个变量,让变量指向该地址;
2.修改不可变对象(字符串、数组等)需要给出新的空间;
3.修改可变对象(列表、字典等)不需要给出新空间。
2.浅拷贝
浅拷贝(切片、工厂函数、对象的copy()方法、copy模块中的copy函数)仅仅复制了存储空间中内容的地址
>>> a = ['huhu', ]
>>> b = a[:]
>>>
>>>
>>> a = 'haha'
>>> a.append(3)
>>> a
['haha', ]
>>> b
['huhu', ]
从上面的代码可以看出,a和b没有修改前都是指向一个存储空间的,即他们的内容和地址都是相同的。当a修改时,因为字符串是不可变对象,所以需要给出新的存储空间来指定新的字符串,而列表就不用,所以b中字符串改变了,列表没变。(相当于一台电脑,a可以用,然后b也想用,a就把可以使用这台电脑的权限赋予b,这样ab公用这台电脑)
3.深拷贝
深拷贝完全拷贝了一个副本,存储空间内容和地址都不一样。
深拷贝只有一种方式:copy模块中的deepcopy函数。
>>> from copy import deepcopy
>>> a = ['huhu', ]
>>> b = deepcopy(a)
>>> [>
>>> [>
>>> a = 'haha'
>>> a.append(3)
>>> a
['haha', ]
>>> b
['huhu', ]
从这里可以看出深拷贝是完全拷贝出来一个副本,重新给了一个存储空间赋值给b,内容和地址与a不同。(相当于一台电脑,a可以用,然后b也想用,a就给b买了一台一模一样的电脑使用,这样a用a的电脑,b用b的电脑)
页:
[1]