Python中列表字典中元素的增量
我有一个简单的代码:Python中列表字典中元素的增量,python,dictionary,Python,Dictionary,我有一个简单的代码: M = dict.fromkeys([0, 1, 2, 3, 4], [0, 0]) M[0][1] += 2 print(M) 为什么这是输出 {0: [0, 2], 1: [0, 2], 2: [0, 2], 3: [0, 2], 4: [0, 2]} 它会增加字典中列表的所有元素!我只想用键0增加列表的第二个元素,如下所示: {0: [0, 2], 1: [0, 0], 2: [0, 0], 3: [0, 0], 4: [0, 0]} M中的所有值都指向完全相同
M = dict.fromkeys([0, 1, 2, 3, 4], [0, 0])
M[0][1] += 2
print(M)
为什么这是输出
{0: [0, 2], 1: [0, 2], 2: [0, 2], 3: [0, 2], 4: [0, 2]}
它会增加字典中列表的所有元素!我只想用键0增加列表的第二个元素,如下所示:
{0: [0, 2], 1: [0, 0], 2: [0, 0], 3: [0, 0], 4: [0, 0]}
M
中的所有值都指向完全相同的列表。证明:
>>> map(id, M.values())
[139986331512912, 139986331512912, 139986331512912, 139986331512912, 139986331512912]
如果更改它,它将影响所有关键点。尝试为每个键创建一个新列表:
>>> M = { k:[0,0] for k in [0, 1, 2, 3, 4] }
>>> M[0][1] += 2
>>> print(M)
{0: [0, 2], 1: [0, 0], 2: [0, 0], 3: [0, 0], 4: [0, 0]}
顺便说一句,如果
dict.fromkeys
采用的是价值结构,而不是价值本身(如中所示),那就更好了