列出重复和记忆

时间:2013-12-07 14:03:13

标签: python list memory-management

考虑以下代码:

lst = [['a']*5]*4
lst[1][1] = '*'

这段代码:

lst= [['a'] * 5 for i in range(4)]
lst[1][1] = '*'

是什么让他们与众不同?

由于

2 个答案:

答案 0 :(得分:2)

这些是相同的对象:

>>> lst = [['a']*2]*2
>>> map(id, lst)
[60543624, 60543624]
>>> lst[0] is lst[1]
True

答案 1 :(得分:1)

因为,您不会创建其中包含5个a的四个列表。相反,您要创建4个列表,这些列表指向同一个列表,其中包含5个a个。所以,你改变一个,效果在所有其他人中也可以看到。