gpt4 book ai didi

python - 使用 deepcopy 创建一个新的 obj,但新的 obj 与旧的 obj 共享变量

转载 作者:太空宇宙 更新时间:2023-11-04 10:40:05 27 4
gpt4 key购买 nike

我正在处理一些使用 pygraph 模块的类,当我使用 add_node() 方法时,它总是出现“node xxx already in graph”。所以我尝试使用 deepcopy() 创建一个新实例并遇到一些问题:

class test:
_storage = []
def add_item(self,item):
self._storage.append(item)

def pop_item(self,item):
return self._storage.pop()

def __repr__(self):
return '%s' %self._storage[:]

if __name__ == '__main__':
a1 = test()
a1.add_item(3)
a1.add_item(4)
from copy import copy,deepcopy
a2 = copy(a1)
a3 = deepcopy(a2)

它显示:

In[28]: a1
Out[28]: [3, 4]

In[29]: a2
Out[29]: [3, 4]

In[30]: a3
Out[30]: [3, 4]

但是如果我在列表 a2 中添加一些新项目,a3 也会发生变化

In[31]: a1.add_item(440)

In[32]: a2
Out[32]: [3, 4, 440]

In[33]: a3
Out[33]: [3, 4, 440]

那么我怎样才能只复制一些实例并且它的变量独立于旧实例中的变量呢??

最佳答案

_storage 是一个类变量。 deepcopy 不会创建整个类的新副本,因此副本仍将共享相同的类变量。你想要的是一个实例变量:

def __init__(self):
self._storage = []

关于python - 使用 deepcopy 创建一个新的 obj,但新的 obj 与旧的 obj 共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21177109/

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