您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

如何覆盖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__会类似(也接受memoarg),但是在返回之前,它必须调用self.foo = deepcopy(self.foo, memo)任何self.foo需要深度复制的属性(本质上是容器属性-列表,字典,非原始对象,它们通过__dict__s保存其他内容)。

python 2022/1/1 18:28:24 有444人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶