【问题标题】:Changing one dict changes all dicts in a list of dicts [duplicate]更改一个字典会更改字典列表中的所有字典 [重复]
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多