Python:使用copy.deepcopy复制对象,还是编写自己的复制函数?

3

目前我正在使用copy模块创建一些对象的副本。

在某些情况下(频繁发生),我需要创建可能有几个原始对象的副本,然后分别修改每个副本(这就是为什么我使用copy的原因)。

该对象具有各种数据类型的多个实例(列表、整数、字符串、其他类),这些副本需要具有相同的值,但我不确定调用copy.deepcopy()是否更快,或者做类似于以下内容:

def copy(self, other):
   other.prop1 = self.prop1
   other.prop2 = self.prop2
   other.prop3 = self.prop3

是否更快?有没有人遇到过这个问题,然后决定使用copy模块,因为它比大多数人能想出来的任何东西都要快?

附注:上面的代码无法正确复制可变对象和那些“其他类”。也许这表明深度拷贝是最安全(也是最快)的方法?


如果prop1、prop2或prop3中的任何一个是可变的(即列表、字典、集合、对象等,而不是int、tuple、float、frozenset),那么上面的代码将导致共享对象,并可能导致错误。例如:a = [1,2,3]; b = a; b.append(4); print a 的结果是 [1,2,3,4] - lambacck
它是什么类型的对象?副本有什么用处?在Python中,像其他引用语义语言一样,通常通过以避免需要值复制的方式编写算法来解决值复制问题。 - Karl Knechtel
以上函数的正确名称是 shallow_copy - Maxim Egorushkin
1个回答

2

不是要轻率地说,但你是否考虑过对你的代码进行分析?这里是文档。将copy.deepcopy与自己编写的自定义复制方法进行比较。这样,你就可以获得关于你特定情况的硬数据,并做出最佳决策 - 如果有人问你为什么这样做,你也可以支持自己的决定!


是的,我一直想对我的代码进行性能分析。我会尝试一下。 - MxLDevs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接