有人能给我解释一下为什么在一本字典被添加到一个列表后,清除它会抹掉这个列表吗?我一定要去做吗?

2024-10-01 07:12:58 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个我正在尝试做的例子

profData = []
currentDic = {}

currentDic['name'] = 'Mike'
currentDic['job'] = 'Bartender'
currentDic['company'] = 'Big Bar'

profData.append(currentDic)
currentDic.clear()

currentDic['name'] = 'John'
currentDic['job'] = 'Server'
currentDic['company'] = 'Red Robin'

profData.append(currentDic)
currentDic.clear()


print(profData)
print(currentDic)

出于某种原因,我得到了这个结果

[{}, {}]
{}

我想反复使用currentDic将字典插入profData列表。有什么想法吗


Tags: nameserverbarjobjohncompany例子mike
1条回答
网友
1楼 · 发布于 2024-10-01 07:12:58

正如python中提到的@Selcuk,当您创建一个变量并赋值时,您的变量就是对该值的引用。 如果将相同的值分配给另一个变量,则会为该值创建另一个引用,而不是将该值存储在新的内存地址并分配给该变量

在您的程序中,创建一个字典并将其附加到列表中。列表中的字典将包含与上面创建的字典相同的引用。它类似于通过引用传递

为了避免您面临的问题,您可以做的是将字典的副本传递给列表

import copy

profData = []
currentDic = {}

currentDic['name'] = 'Mike'
currentDic['job'] = 'Bartender'
currentDic['company'] = 'Big Bar'

profData.append(copy.copy(currentDic)) # Use copy.deepcopy if your dictionary is nested
currentDic.clear()

currentDic['name'] = 'John'
currentDic['job'] = 'Server'
currentDic['company'] = 'Red Robin'

profData.append(currentDic)
currentDic.clear()


print(profData)
print(currentDic)

输出:

[{'name': 'Mike', 'job': 'Bartender', 'company': 'Big Bar'}, {}]
{}

相关问题 更多 >