copy.copy(x)和copy.deepcopy(x)

浅拷贝和深拷贝之间的区别 复合对象(包含其他对象的对象,如列表或类实例)相关!

在Python中,对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已

浅拷贝:

拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制

深拷贝:

外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制

>>> import copy
>>> a = [1, 2, [3, 4]]
#a 里边有三个元素:1, 2,[3, 4]
>>> cop1 = copy.copy(a)
>>> cop2 = copy.deepcopy(a)
>>> cop1 == cop2
True
>>> cop1 is cop2
False 
#cop1 和 cop2 内容看上去相同,但已不再是同一个object
>>> a[2][0] = "hey!" 
>>> a
[1, 2, ['hey!', 4]]
>>> cop1
[1, 2, ['hey!', 4]]
>>> cop2
[1, 2, [3, 4]]
#将a的元素a[2]中的元素修改了一个,发现cop1被改变,但是cop2未曾发生改变。

你可能感兴趣的:(Python基础)