我想制作一个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时,这只意味着B指向对象A.因此当我改变A时它也会改变B.是否有可能使B成为具有与A相同属性的新实例,但是当我更改A时不会改变?在上面的例子中,当我增加A时,我希望B的值保持为1.
如果A和B是列表而不是对象,我会写B = list(A)。我想我在问类对象是否有类似的方法?
提前感谢您的帮助!
答案 0 :(得分:7)
如果你想制作副本,那么一种方法就是使用deepcopy
:
from copy import deepcopy
B = deepcopy(A)
所有=
的作用是为内存中的同一对象分配另一个引用。 deepcopy
在内存中创建了一个全新的对象,A
和B
的值将引用它。如果您执行以下操作,您将看到不同的打印件:
B = A
print( id(A), id(B)) # Same ids
B = deepcopy(A)
print( id(A), id(B) # Different ids