2011-06-29 65 views
2

假設我有一個具有某個變量foo.x的類Class的實例foo。現在我想製作一份foo的副本:Python中的類的副本

bar = foo 

當我現在改變bar.x時,這也改變了foo.x.我如何獲得foo副本,我可以在不更改原始foo的情況下更改所有內容?創建Class的新實例不是一種選擇,因爲我需要它在foo已經存在的狀態。

+1

你需要一個新的實例是肯定的,因爲副本是一個新的實例。 .. – digEmAll

回答

5

您需要使用模塊拷貝。

bar = copy.deepcopy(foo) 
4

您可以使用deepcopy

bar = deepcopy(foo) 
0

巴= copy.copy(富)#使FOO的淺表副本

巴= copy.deepcopy(富)#使FOO的深層副本

拷貝(X) 對任意Python對象進行淺拷貝操作。

deepcopy(x,memo = None,_nil = []) 對任意Python對象執行深度複製操作。

1

請注意,您也可以定製(知道你是否真的需要這一點)行爲實現自己的拷貝方式如下:

from copy import copy 

class d(object): 

    def __copy__(self): 
     newd = d() 
     newd.x = self.x+1 
     return newd 

foo = d() 
foo.x = 11 
a = copy(d) 
print a.x, foo.x 
+0

不是我正在尋找,但看起來很有趣。謝謝! –

+0

@Till B - 不用客氣,我發佈了它,這樣你就可以有更多的選擇來做你想做的事情,所以你可以自定義複製任何你想要的方式。 –