【发布时间】:2019-07-24 11:26:21
【问题描述】:
在"How to override the copy/deepcopy operations for a Python object?" 的帖子中,写在以下答案之一中:
def __deepcopy__(self, memo):
cls = self.__class__
result = cls.__new__(cls)
memo[id(self)] = result
for k, v in self.__dict__.items():
setattr(result, k, deepcopy(v, memo))
return result
是覆盖 deepcopy 方法的一种可能方式。我不明白每一行的作用。这个实施的目的是什么?我不能只使用以下特定于我的班级的东西来创建自己的复制方法吗?
def my_copy(self, original_obj):
obj = MyClass()
obj.a = (copy of a from the other object)
obj.b = (copy of b from the other object)
...
return obj
【问题讨论】:
-
目的:有时你的类包含不能被深度复制或者你不想复制而是共享现有对象的属性(例如弱引用,数据库连接,......)。在示例中的
for循环中,您可以过滤这些属性并根据需要进行处理。
标签: python python-3.x class deep-copy