我创建了一个字典如下:
gP = dict.fromkeys(range(6), {'a': None, 'b': None, 'c': None, 'd': None})
现在,当我尝试修改一个值时:
gP[0]['a'] = 1
出于某种原因,a
的所有值(无论它们属于哪个键)都变为1,如下所示:
{0: {'a': 1, 'b': None, 'c': None, 'd': None},
1: {'a': 1, 'b': None, 'c': None, 'd': None},
2: {'a': 1, 'b': None, 'c': None, 'd': None},
3: {'a': 1, 'b': None, 'c': None, 'd': None},
4: {'a': 1, 'b': None, 'c': None, 'd': None},
5: {'a': 1, 'b': None, 'c': None, 'd': None}}
我做错了什么?什么是正确的任务说明?
答案 0 :(得分:5)
正如@deceze所说,Python不会制作副本。您在键值对的所有值部分中引用相同的dict。
另一种选择是:
gP = {x: {'a': None, 'b': None, 'c': None, 'd': None} for x in range(6)}
更新:@Chris_Rands提供了更清晰的答案:
{x: dict.fromkeys('abcd') for x in range(6)}