如何在Python 3.3中复制自定义类的实例?

ASC*_*NSI 6 python python-3.x

我试图复制一个自定义的类的实例在Python 3.3,类似于如何dict.copy()list.copy()工作。我该怎么办?

这是我的自定义类的示例:

class CustomClass(object): # Custom class example
    def __init__(self, thing):
        self.thing = thing
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

通常,您可以使用该copy模块生成Python对象的副本。

  • copy.copy()将产生浅表副本;创建了一个新实例,但是仅复制了所有属性。如果您的任何属性都是可变的,并且您对这些对象进行了突变,您将看到这些更改都反映在两个对象上。

  • copy.deepcopy()将递归产生副本;任何可变对象本身都会被克隆。

如果您的类实现了一个__copy__方法,它将用于创建对象的浅表副本;返回具有复制属性并根据需要更改的属性的新实例。

同样,您可以实现一个__deepcopy__方法来实现自定义深层复制方法。它会传递memo状态,然后传递给递归copy.deepcopy()调用。

请注意,您不能使用它来复制类对象。类是单身的 ; 在这种情况下,您无需创建副本。您可以改用子类化或类工厂函数来产生不同的类对象。