2015-04-20 40 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

相關問題