【发布时间】:2019-09-18 10:08:39
【问题描述】:
我有一个用于存储数据的字典列表。 当我对一个字典进行更改时,该更改会反映在所有字典中。
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)
我期待着,只有最后一个字典会得到更新。但令人惊讶的是,所有的 dicts 都被改变了。
上述程序得到的结果是
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 的 dict 被更改)是
Before editing [{'subjects': 0, 'marks': []}, {'subjects': 0, 'marks': []}, {'subjects': 0, 'marks': []}]
After editing [{'subjects': 0, 'marks': []}, {'subjects': 0, 'marks': []}, {'subjects': 1, 'marks': [50]}]
有人可以解释这种奇怪的行为并提出解决方案以获得预期结果吗?
【问题讨论】:
-
都是同一个字典,重复了三遍。这是因为您创建列表的方式(使用
* 3),它只是创建了一个具有三倍相同引用的列表。请参阅stackoverflow.com/questions/2785954/… 之类的问题以获得更好的方法。
标签: python python-3.x list dictionary python-3.4