更改一个字典将更改字典列表中的所有字典

时间:2019-09-18 10:08:39

标签: python python-3.x list dictionary python-3.4

我有一个用于存储数据的字典列表。 当我对一个命令进行更改时,该更改将反映在所有命令中。

students = [{"marks": [], "subjects": 0}]*3
specific_student = 2
print("Before updating", students)
students[specific_student]["marks"].append(50)
students[specific_student]["subjects"] += 1
print("After updating", students)

我期望只有最后一个字典会被更新。但令人惊讶的是,所有命令都被更改了。

上述程序的获得的结果

Before editing [{'subjects': 0, 'marks': []}, {'subjects': 0, 'marks': []}, {'subjects': 0, 'marks': []}]
After editing [{'subjects': 1, 'marks': [50]}, {'subjects': 1, 'marks': [50]}, {'subjects': 1, 'marks': [50]}]

但是预期结果(仅更改了位置2的格)

Before editing [{'subjects': 0, 'marks': []}, {'subjects': 0, 'marks': []}, {'subjects': 0, 'marks': []}]
After editing [{'subjects': 0, 'marks': []}, {'subjects': 0, 'marks': []}, {'subjects': 1, 'marks': [50]}]

有人可以解释这种奇怪的行为并提出解决方案以获得预期结果吗?

1 个答案:

答案 0 :(得分:1)

您需要在列表上使用.copy(),否则它将是您字典的链接,而不是具有相同值的新字典。
请注意,您需要在每个字典和列表上都使用.copy(),甚至要复制在字典/列表中的那些