如何覆盖Python对象的复制深复制 *** 作?

如何覆盖Python对象的复制深复制 *** 作?,第1张

如何覆盖Python对象的复制/深复制 *** 作?

有关自定义的建议位于文档页面的最后:

类可以使用与控制酸洗相同的接口来控制复制。有关这些方法的信息,请参见模块pickle的描述。复制模块不使用copy_reg注册模块。

为了让一个类定义自己的副本实现,它可以定义特殊的方法

__copy__()

__deepcopy__()
。前者被称为实现浅拷贝 *** 作;没有传递其他参数。后者被称为实现深度复制 *** 作。它传递了一个参数,即备忘字典。如果
__deepcopy__()

实现需要复制组件的深层副本,则应
deepcopy()
以该组件为第一个参数,并以备注字典作为第二个参数来调用该函数。

由于您似乎不关心腌制自定义,因此定义

__copy__
__deepcopy__
绝对似乎是适合您的正确方法。

具体来说,

__copy__
(浅表副本)在您的情况下非常容易…:

def __copy__(self):  newone = type(self)()  newone.__dict__.update(self.__dict__)  return newone

__deepcopy__
会类似(也接受
memo
arg),但是在返回之前,它必须调用
self.foo = deepcopy(self.foo,memo)
任何
self.foo
需要深度复制的属性(本质上是容器属性-列表,字典,非原始对象,它们通过
__dict__
s保存其他内容)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5631037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存