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