这是一个对列表执行操作的简单代码:
>>> a = [0] * 5
>>> a
[0, 0, 0, 0, 0]
>>> a[0] = 5
>>> a
[5, 0, 0, 0, 0]
>>>
现在,没有异常。
现在,我尝试使用字典列表而不是整数列表:
>>> a = [{}] * 5
>>> a
[{}, {}, {}, {}, {}]
>>> a[0]['b'] = 4
>>> a
[{'b': 4}, {'b': 4}, {'b': 4}, {'b': 4}, {'b': 4}]
>>>
我不明白为什么列表中的所有元素都被修改了......
谁能告诉我为什么?并提供解决方法?
答案 0 :(得分:9)
这并不奇怪。
解决方法:
a = [{} for i in xrange(5)]
[…] * 5
创建一个…
以及一个指向此…
的五个指针的列表。
0
是一个不可变的整数。您无法修改它,您可以将其替换为另一个整数(例如a[0] = 5
)。那么它是一个不同的整数。
{}
是一个可变字典。您正在修改它:a[0]['b'] = 4
。它总是相同的字典。
答案 1 :(得分:0)
试试这个,
a = map([].append, {} for i in xrange(3))