奇怪的行为与python中的字典列表

Jul*_*ULD 2 python dictionary list

这是一个对列表执行操作的简单代码:

>>> a = [0] * 5
>>> a
[0, 0, 0, 0, 0]
>>> a[0] = 5
>>> a
[5, 0, 0, 0, 0]
>>> 
Run Code Online (Sandbox Code Playgroud)

就目前而言,没有异常.

现在,我尝试使用字典列表而不是整数列表来执行相同的操作:

>>> a = [{}] * 5
>>> a
[{}, {}, {}, {}, {}]
>>> a[0]['b'] = 4
>>> a
[{'b': 4}, {'b': 4}, {'b': 4}, {'b': 4}, {'b': 4}]
>>> 
Run Code Online (Sandbox Code Playgroud)

我不明白为什么列表中的所有元素都被修改了......

谁能告诉我为什么?并提供解决方法?

eum*_*iro 9

这并不奇怪.


解决方法:

a = [{} for i in xrange(5)]
Run Code Online (Sandbox Code Playgroud)

[…] * 5创建一个和五个指针的列表.

0是一个不可变的整数.你不能修改它,你可以用另一个整数(例如a[0] = 5)替换它.那么它是一个不同的整数.

{}是一本可变的字典.你正在修改它:a[0]['b'] = 4.它始终是相同的字典.