我正在尝试在Python 3.3中复制自定义类的实例,类似于dict.copy()
和list.copy()
的工作方式。我该怎么做?
以下是我的自定义类的示例:
class CustomClass(object): # Custom class example
def __init__(self, thing):
self.thing = thing
答案 0 :(得分:3)
通常,您可以使用copy
module生成Python对象的副本。
copy.copy()
会生成浅副本;创建一个新实例,但只复制所有属性。如果您的任何属性是可变的并且您改变了这些对象,您将看到这些对象反映在两个对象上。
copy.deepcopy()
将递归生成副本;任何可变对象都将被克隆。
如果您的类实现了__copy__
方法,它将用于创建对象的浅表副本;返回一个新实例,其中包含根据需要复制和更改的属性。
同样,您可以实现__deepcopy__
方法来实现自定义深层复制方法;它将被传递到memo
状态,将其传递给递归copy.deepcopy()
调用。
请注意,您无法使用它来复制类对象。类是单身人士;在这种情况下,您不需要创建副本。您可以使用子类化或类工厂函数来生成不同的类对象。