字典列表中的索引会影响所有字典
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)]
我做了一个词典列表如下。
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)]