python 中字典列表的奇怪行为

2023-12-07

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

>>> 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}]
>>> 

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

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


这并不奇怪。


解决方法:

a = [{} for i in xrange(5)]

[…] * 5创建一个以及指向此的五个指针的列表.

0是一个不可变的整数。您无法修改它,只需将其替换为另一个整数(例如a[0] = 5)。那么它是一个不同的整数。

{}是一个可变字典。您正在修改它:a[0]['b'] = 4。它始终是同一本词典。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 中字典列表的奇怪行为 的相关文章

随机推荐