首页 > 解决方案 > 为具有相同键的字典设置值时,python 字典列表的意外行为

问题描述

Python 3.7.2 中的这种行为(没有检查其他版本)让我感到惊讶。目标是拥有一个具有相同键的字典列表,并能够操作单个值。使用列表索引和字典键,预期的行为是我应该能够设置特定字典的键的值。

这是一个示例代码:

    lst = []

    lst.append({"A" : 0, "B" : 0 })
    lst.append({"A" : 0, "B" : 0 })

    lst[1]["B"] = 11
    print(lst)

    lst2 = [{"A" : 0, "B" : 0 }]*2

    lst2[1]["B"] = 11
    print(lst2)

结果如下:

[{'A': 0, 'B': 0}, {'A': 0, 'B': 11}]
[{'A': 0, 'B': 11}, {'A': 0, 'B': 11}]

第二个结果让我感到惊讶,为什么它将两个字典的键“B”的值设置为 11?为什么初始化 aslstlst1.

标签: pythonlistdictionary

解决方案


如果您复制字典 - 无论是按照您所做的方式,还是a = b = {'someKey': 'someValue'},您只复制引用,而不是对象本身。通过引用更改对象将反映同一对象的其他引用中的更改。


推荐阅读