2017-02-09 68 views
-1

我想創建一個python類對象的副本,該對象在原始對象更改時不會更改。這是我簡單的工作示例:在Python中複製對象實例

class counterObject: 
    def __init__(self): 
     self.Value = 0 

    def incrementValue(self): 
     self.Value += 1 

    def printValue(self): 
     print(self.Value) 

A = counterObject() 
A.incrementValue() 
A.printValue() #Prints 1 

B = A 
A.incrementValue() 
B.printValue() #Currently prints 2. Want to be 1 

從我的理解,當我設置B = A,這也就意味着乙組分的對象A.因此,當我改變一個它改變B中好。是否有可能讓B成爲具有與A相同屬性的新實例,但在更改A時不會改變?在我上面的例子中,當我增量A時,我希望B的值保持爲1.

如果A和B是列表而不是對象,我會寫B = list(A)。我想我問是否有類對象的類似方法?

非常感謝您的幫助!

+0

這聽起來像你想一個單身... – 2017-02-09 17:45:52

+0

的Python一應俱全:從python文檔: https://docs.python.org/2 /library/copy.html – DaOnlyOwner

回答

1

如果你想製作一個副本,其中一個方法是使用deepcopy

from copy import deepcopy 
B = deepcopy(A) 

所有=確實是分配另一個引用內存中的同一個對象。 deepcopy在內存中創建一個全新的對象,值爲AB將引用它。如果你下面你會看到不同的打印:

B = A 
print(id(A), id(B)) # Same ids 

B = deepcopy(A) 
print(id(A), id(B) # Different ids