以下代码段具有相同的输出,无论是否使用已注释掉的' copy.copy()''或者' copy.deepcopy()''(第10行)。为什么?
import copy
class A:
a = [1,2,3]
i = 3
obj = A()
#b = copy.copy(obj)
b = copy.deepcopy(obj)
b.a[0] = -1
b.i= 2
print obj.a
print b.a
print obj.i
print b.i
浅拷贝和深拷贝程序输出:
[-1, 2, 3]
[-1, 2, 3]
3
2
是不是deepcopy()会制作obj的副本,以便b有自己的列表副本a?为什么更改b.a会影响原始对象?
修改
Pynchia和user2357112指出此问题的一部分与之前的question重复。他们是对的。但是,我注意到python的一个奇怪的行为:因为列表a
是一个类属性,所以你制作一个不复制属性的对象的深层副本。 但是,对于i
,b
和obj
中的整数值不同。这意味着b
拥有自己的i
副本,即使i
是类属性。