在字典列表中,更改特定元素也会更改所有其他元素

时间:2020-06-23 16:26:25

标签: python list dictionary

在考虑字典列表时,我发现了这个奇怪的属性。请考虑以下内容:

my_list=[{}]*3
my_list[0]['a']=1
print my_list

即使我专门尝试仅更改列表的0元素,为什么列表中的所有元素也会同时更改?

如果我想分别处理每本词典该怎么办?

更一般地说,除了列出字典之外,还有更好的方法来存储一定数量的字典吗?

3 个答案:

答案 0 :(得分:1)

创建my_list=[{}]*3时,相同的引用已经被n次数了。

因此,当您要更改特定值时,请避免这样做。

您可以尝试这样:

my_list=[{} for i in range(3)]

答案 1 :(得分:1)

是的,乍一看似乎有点奇怪,但是您需要了解如何在python中处理字典。

第一行:您正在创建{}的3份副本并将其存储在列表中。

现在这里发生了什么:

  1. 创建了一个空字典{}
  2. 引用了相同的词典,并将其存储在列表中3次。
  3. 您更改字典中的值,它会反映列表中存储的字典的所有实例。

如何解决这个问题:

my_list = []
for i in range(3):
    my_list.append({})

my_list[0]['a']=1

print(my_list)

输出:

[{'a': 1}, {}, {}]

答案 2 :(得分:0)

list=[{}]*3

执行此操作时,将使用相同的引用创建3次相同的对象。因此,如果您更改一个,所有的都将更改。在python中,不需要声明字典的大小。只需声明一个空字典。