Python:浅和深复制对象

时间:2016-01-26 20:41:04

标签: python list data-structures deep-copy

以下代码段具有相同的输出,无论是否使用已注释掉的' 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是一个类属性,所以你制作一个不复制属性的对象的深层副本。 但是,对于ibobj中的整数值不同。这意味着b拥有自己的i副本,即使i是类属性。

0 个答案:

没有答案