一个类的定义,deliver变量是list类型,并且使用了默认初始化,这是错误
的原因,因为该类的不同实例的deliver成员变量会共享相同存储空间。
class Node:
def __init__(self,uuid,name,var_type,id,
rank=0,
run_times='',
father:list=[],
is_global =False,
deliver:list =[],
n_copy = 0) -> None:
-------------------------分割线----------------------------------
在下面的循环中,向其中一个实例的deliver变量添加元素,另外一个实例
的deliver变量也自动添加了该元素,导致程序与程序员预想逻辑出现差异。
for jtem in s_node:
print([node_dict[jtem].deliver,node_dict[t_node].deliver])
node_dict[jtem].deliver.append('joker')
node_dict[jtem].deliver.append(node_dict[t_node])
print([node_dict[jtem].deliver,node_dict[t_node].deliver])
控制台输出:
[[], []]
[['joker', <__main__.Node object at 0x00000000152BD4C0>],
['joker', <__main__.Node object at 0x00000000152BD4C0>]]
-------------------------分割线----------------------------------
修改后可解决该问题:
class Node:
def __init__(self,uuid,name,var_type,id,
rank=0,
run_times='',
is_global =False,
n_copy = 0) -> None:
self.deliver = []
self.father = []
类不同实例间成员变量共享相同存储空间
最新推荐文章于 2024-06-14 13:55:08 发布