我在python中编写了一个代码,如下所示:
maplist=[{}]*11
mylist=[0]*11
maplist[0]['this']=1
print maplist
当我打印maplist时,输出为:
[{'this': 1}, {'this': 1}, {'this': 1}, {'this': 1}, {'this': 1}, {'this': 1}, {'this': 1}, {'this': 1}, {'this': 1}, {'this': 1}, {'this': 1}]
预期是:
[{'this': 1}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]
而不是只有列表的第一个元素应该在地图中有这个键。是什么导致了这个问题?
答案 0 :(得分:12)
执行以下操作时:
maplist=[{}]*11
你最终得到11个对同一字典的引用。这意味着当您修改一个字典时,它们似乎都会发生变化。
要修复,请将该行替换为:
maplist=[{} for in xrange(11)]
请注意,由于0
是一个标量,下一行很好,因为它是:
mylist=[0]*11
答案 1 :(得分:3)
问题是当你输入
时maplist=[{}]*11
您正在创建一个包含对同一dict
的11个引用的列表。只创建一个字典。
要创建11个单独的词典,您可以执行以下操作:
>>> maplist = [{} for i in range(11)]
>>> maplist[0]['this'] = 1
>>> maplist
[{'this': 1}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]