这是python的正常行为吗?

时间:2011-08-28 11:07:10

标签: python list dictionary

在最新的Python(3.2)中:

>>> l = [{}]*2
>>> l[1]['key'] = 'value'
>>> l
[{'key': 'value'}, {'key': 'value'}]

我预计在此操作之后我将成为[{}, {'key': 'value'}]。是正常行为还是错误?

3 个答案:

答案 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