【问题标题】:Python: copying objects with copy.deepcopy or writing my own copyPython:使用 copy.deepcopy 复制对象或编写我自己的副本
【发布时间】:2011-08-12 13:59:31
【问题描述】:

目前我正在使用复制模块来创建我拥有的某个对象的副本。

在某些情况下(经常发生),我可能需要创建原始对象的多个副本,然后单独修改每个副本(这就是我使用副本的原因)。

该对象有多个不同数据类型的实例(列表、整数、字符串、其他类),并且副本需要具有相同的值,但我不确定调用 copy.deepcopy() 是否会更快,或者做类似的事情

def 副本(自己,其他): 其他.prop1 = self.prop1 其他.prop2 = self.prop2 其他.prop3 = self.prop3

有没有人遇到这个问题,然后决定最好使用复制模块,因为它比大多数人想出的任何东西都要快?

PS:上面的代码不会正确复制可变对象和我提到的那些“其他类”。也许这表明 deepcopy 是最安全(也是最快)的路线?

【问题讨论】:

  • 如果 prop1、prop2 或 prop3 中的任何一个是可变的(即列表、dict、set、object 等,而不是 int、tuple、float、frozenset),那么您上面的内容将导致共享对象并可能导致错误。 a = [1,2,3]; b = a; b.append(4); print a 导致 [1,2,3,4]
  • 它是什么样的对象?副本有什么用?在 Python 中,与其他引用语义语言一样,通常通过以一种避免值复制需求的方式编写算法来解决值复制问题。
  • 上述函数的正确名称是shallow_copy

标签: python deep-copy


【解决方案1】:

不想成为 glib,但您是否考虑过分析您的代码? Documentation here。将 copy.deepcopy 与您自己的自定义复制方法进行比较。这样一来,您将获得有关您的特定情况的可靠数据,并可以做出最佳决策 - 如果有人问您为什么这样做,请支持它!

【讨论】:

  • 是的,我一直在考虑分析我的代码。我会试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多