2017-02-09 108 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