【问题标题】:Python: deepcopy does not work on user-defined classes?Python:deepcopy 不适用于用户定义的类?
【发布时间】:2013-08-24 05:30:56
【问题描述】:

在下面的示例中,我希望 deepcopy 创建字段的副本,而不仅仅是复制引用。这里发生了什么,有没有简单的方法解决它?

from copy import deepcopy

class Test:
    field = [(1,2)]

t1 = Test()
t2 = deepcopy(t1)

t2.field[0]=(5,10)

print t1.field # [(1,2)] expected but [(5,10)] obtained
print t2.field # [(5,10)] expected

输出:

[(5, 10)]
[(5, 10)]

【问题讨论】:

标签: python deep-copy


【解决方案1】:

深度复制(默认情况下)仅适用于实例级别的属性 - 而不是类级别 - 存在多个唯一的 class.attribute... 没有多大意义...

将您的代码更改为:

class Test:
    def __init__(self):
        self.field = [(1,2)]

【讨论】:

  • 除非他覆盖__copy__/__deepcopy__。尽管如此,这还是很奇怪。
  • 这实际上不是问题的答案,而是问题的解决方法。如果您不想/不能在每种情况下都实例化该类,例如:您有一个 @classmethod,则不能应用此解决方法...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 2022-07-04
  • 2021-05-10
  • 1970-01-01
相关资源
最近更新 更多