gpt4 book ai didi

python - copy() 和 deepcopy() 之间的 Python 函数

转载 作者:行者123 更新时间:2023-11-28 18:40:06 25 4
gpt4 key购买 nike

我的回复可以被认为是对 this post 的跟进.

我有一本包含对象列表的字典。我想要在 copy 模块中的 copydeepcopy 函数之间的一些函数。我想要对内置 Python 结构和基元(整数、集合、字符串、列表等)执行深度复制但不生成用户创建对象(或非基元、非聚合)的深度复制的东西对象)。

看来我可能需要修改对象的 __deepcopy__ 方法,但我不太确定如何正确地执行此操作。不修改对象的 __deepcopy__ 方法的解决方案也是更可取的,如果我想在未来的脚本中制作对象的深层复制。

假设这是我的 Python 文件的顶部:

import copy

class Obj():
def __init__(self,i):
self.i = i
pass

d = {0:Obj(5),1:[Obj(6)],2:[]}
d2 = copy.deepcopy(d)

作为示例,我将在下面列出一些代码片段,以及实际输出和所需输出。

片段 1

d[1][0].i=7
print "d[1][0].i:",d[1][0].i,"d2[1][0].i:",d2[1][0].i
  • 实际输出:d[1][0].i: 7 d2[1][0].i: 6
  • 期望的输出 d[1][0].i: 7 d2[1][0].i: 7

片段 2

d[0].i = 6
print "d[0].i:",d[0].i,"d2[0].i:",d2[0].i
  • 实际输出:d[0].i: 6 d2[0].i: 5
  • 期望的输出 d[0].i: 6 d2[0].i: 6

最佳答案

给你,直接来自文档:

import copy

class Obj:
def __init__(self, i):
self.i = i

def __deepcopy__(self, memo):
return self

您的最后一个示例似乎不正确,因为 d3d 的浅拷贝,因此 2 索引的列表应该保留相同的引用。

要允许深度复制作为一个选项,您可以在对象中设置一些属性,并在 __deepcopy__ 中检查它。

关于python - copy() 和 deepcopy() 之间的 Python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com