在Python中复制对象实例

sea*_*son 2 python oop

我想制作一个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).我想我问的是类对象是否有类似的方法?

预先感谢您的帮助!

Gil*_*een 7

如果你想复制,那么一种方法是使用deepcopy:

from copy import deepcopy
B = deepcopy(A)
Run Code Online (Sandbox Code Playgroud)

所有=工作都是为内存中的同一对象分配另一个引用.在deepcopy创建与值存储一个全新的对象AB将引用它.如果您执行以下操作,您将看到不同的打印件:

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)