阅读文档,我理解copy.deepcopy(obj)
递归地复制了这个文档中的任何其他对象,但是当我运行时:
>>> import copy
>>> class SomeObject:
... a=1
... b={1:1,2:2}
...
>>> o1=SomeObject()
>>> o2=copy.deepcopy(o1)
>>> id(o1)
140041523635624
>>> id(o2)
140041523635912
>>> id(o1.b)
30087968
>>> id(o2.b)
30087968
它似乎没有复制'o1'中的字典。任何人都可以告诉我,如果我做错了什么,或者如何在对象中获得字典的副本?
由于
答案 0 :(得分:3)
Deepcopy仅复制实例属性。您的b
属性是一个类属性。
即使您不手动创建副本而是创建SomeObject
的新实例,仍然会共享b
:
>>> class SomeObject:
... a=1
... b={1:1,2:2}
...
>>> so1 = SomeObject()
>>> so2 = SomeObject()
>>> so1.b is so2.b
True
>>> so1.b is SomeObject.b
True
使b
成为实例属性:
>>> import copy
>>> class SomeObject:
... a = 1
... def __init__(self):
... self.b = {1: 1, 2: 2}
...
>>> so1 = SomeObject()
>>> so2 = copy.deepcopy(so1)
>>> so1.b is so2.b
False