在最新的Python(3.2)中:
>>> l = [{}]*2
>>> l[1]['key'] = 'value'
>>> l
[{'key': 'value'}, {'key': 'value'}]
我预计在此操作之后我将成为[{}, {'key': 'value'}]
。是正常行为还是错误?
答案 0 :(得分:12)
正常。请尝试使用l = [{} for x in range(2)]
。
[{}]*2
实际上并没有制作2个不同的词典 - 它创建了一个列表,其中包含对同一个词典的两个引用。因此,更新该字典会使更改显示在列表中的两个项目中,因为这两个项目实际上是相同的字典,只是引用了两次。
答案 1 :(得分:3)
[{}]*2
不会产生包含两个词典的列表,它会导致列表中包含两次相同的词典。请改用[{} for x in range(2)]
。
答案 2 :(得分:0)
对于v 2.5.1
,此代码在Codepad上生成相同的结果import sys
print sys.version_info
l = [{}]*2
l[1]['key'] = 'value'
print l