有关自定义的建议位于文档页面的最后:
类可以使用与控制酸洗相同的接口来控制复制。有关这些方法的信息,请参见模块pickle的描述。复制模块不使用copy_reg注册模块。
为了让一个类定义自己的副本实现,它可以定义特殊的方法
__copy__()和__deepcopy__()。前者被称为实现浅拷贝 *** 作;没有传递其他参数。后者被称为实现深度复制 *** 作。它传递了一个参数,即备忘字典。如果__deepcopy__()
实现需要复制组件的深层副本,则应deepcopy()以该组件为第一个参数,并以备注字典作为第二个参数来调用该函数。
由于您似乎不关心腌制自定义,因此定义
__copy__和
__deepcopy__绝对似乎是适合您的正确方法。
具体来说,
__copy__(浅表副本)在您的情况下非常容易…:
def __copy__(self): newone = type(self)() newone.__dict__.update(self.__dict__) return newone
__deepcopy__会类似(也接受
memoarg),但是在返回之前,它必须调用
self.foo = deepcopy(self.foo,memo)任何
self.foo需要深度复制的属性(本质上是容器属性-列表,字典,非原始对象,它们通过
__dict__s保存其他内容)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)