字典列表中的索引会影响所有字典

Indexing in a list of dictionaries affects all the dictionaries

我做了一个词典列表如下。

num=5
core_dict ={'c1':[0]*num , 'c2':[0]*num}
link=[core_dict]*3

这给出了(正确的)输出:

[ {'c1': [0, 0, 0, 0, 0], 'c2': [0, 0, 0, 0, 0]},  #represents link1 for me
  {'c1': [0, 0, 0, 0, 0], 'c2': [0, 0, 0, 0, 0]},  #represents link2 for me
  {'c1': [0, 0, 0, 0, 0], 'c2': [0, 0, 0, 0, 0]}]  #represents link3 for me

然后我想替换 link2 的 'c1' 值。我愿意:

link[1]['c1']=[10]*num

但这会更改列表中每个字典的 'c1' 键的值。 我怎样做索引才能只影响一本字典?

[ {'c1': [10, 10, 10, 10, 10], 'c2': [0, 0, 0, 0, 0]},  #represents link1 for me
  {'c1': [10, 10, 10, 10, 10], 'c2': [0, 0, 0, 0, 0]},  #represents link2 for me
  {'c1': [10, 10, 10, 10, 10], 'c2': [0, 0, 0, 0, 0]}]  #represents link3 for me

您对 link 的初始化将每个元素指向同一个字典(即内存中的相同位置):

而不是使用:

link=[core_dict]*3

使用

from copy import deepcopy
link=[deepcopy(core_dict) for _ in range(3)]

这样每个字典使用的内存是完全独立的。

您也可以像这样创建 link 而无需导入 deepcopy:

link=[core_dict.copy() for i in range(3)]