【发布时间】: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。