2015-04-20 39 views
1

据我所知,copy.deepcopy复制了包含在目标对象中的对象。我的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是用相同的alist_value

[10,2,3,4,5]

[10,2,3,4,5]

我预期什么的唯一alist_value的更改。

有没有什么我错过了关于deepcopy?

回答

3

list_value是由MyClass类的所有对象实例共享的class attribute。因此,即使您指定a.list_value[0]list_valueab也是相同的。最好改变你的构造函数,将它添加为特定对象实例的属性:

def __init__(self, name): 
     self.name = name 
     self.list_value = [1, 2, 3, 4, 5] 
+0

啊......那么,我应该只在类字段中放置共享变量吗? –

+0

你能解释一下“所有实例共享”是什么意思吗?此外,请提供有关此现象的文档链接。 –

+0

@JaeJunLEE是的。 – JuniorCompressor

相关问题