在Python中复制对象实例

时间:2017-02-09 17:44:39

标签: 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

根据我的理解,当我设置B = A时,这只意味着B指向对象A.因此当我改变A时它也会改变B.是否有可能使B成为具有与A相同属性的新实例,但是当我更改A时不会改变?在上面的例子中,当我增加A时,我希望B的值保持为1.

如果A和B是列表而不是对象,我会写B = list(A)。我想我在问类对象是否有类似的方法?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:7)

如果你想制作副本,那么一种方法就是使用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