我的深层复制在这种情况下不起作用
my deepcopy does not work in this situation
据我所知,copy.deepcopy复制目标对象中包含的对象。
但我的代码在这种情况下不起作用。
import copy
class MyClass(object):
list_value = [1, 2, 3, 4, 5]
def __init__(self, name):
self.name = name
a = MyClass('a')
b = copy.deepcopy(a)
a.list_value[0] = 10
print a.list_value
print b.list_value
输出是说 b
实例的 list_value
与 a
实例的 list_value
相同。
[10, 2, 3, 4, 5]
[10, 2, 3, 4, 5]
我期望的是 list_value
只有 a
的变化。
关于 deepcopy 有什么我遗漏的吗?
list_value
是由 class MyClass
的所有对象实例共享的 class attribute。因此,即使您指定 a.list_value[0]
,list_value
对于 a
和 b
也是相同的。最好更改构造函数以将其添加为特定对象实例的属性:
def __init__(self, name):
self.name = name
self.list_value = [1, 2, 3, 4, 5]
据我所知,copy.deepcopy复制目标对象中包含的对象。
但我的代码在这种情况下不起作用。
import copy
class MyClass(object):
list_value = [1, 2, 3, 4, 5]
def __init__(self, name):
self.name = name
a = MyClass('a')
b = copy.deepcopy(a)
a.list_value[0] = 10
print a.list_value
print b.list_value
输出是说 b
实例的 list_value
与 a
实例的 list_value
相同。
[10, 2, 3, 4, 5]
[10, 2, 3, 4, 5]
我期望的是 list_value
只有 a
的变化。
关于 deepcopy 有什么我遗漏的吗?
list_value
是由 class MyClass
的所有对象实例共享的 class attribute。因此,即使您指定 a.list_value[0]
,list_value
对于 a
和 b
也是相同的。最好更改构造函数以将其添加为特定对象实例的属性:
def __init__(self, name):
self.name = name
self.list_value = [1, 2, 3, 4, 5]