列表附加出错了

时间:2016-01-10 15:19:03

标签: python

我有以下代码作为问题。

list = [ [ ] ] * 5
print list
list[0].append(1)
print list

第一行打印[[][][][][]],这是它应该打印的内容 但第二个印刷品给出了

[[1][1][1][1][1]]

为什么会这样?它应该只附加到第一个列表。

2 个答案:

答案 0 :(得分:2)

list = [ [] ] * 5

...您正在为同一个内部列表创建五个引用。因此,附加其中一个附加给他们所有人。

改为考虑:

l = [ [] for _ in range(5) ]

...为每个元素构建一个新列表。

答案 1 :(得分:0)

使用id,您可以看到它们引用同一个对象。:

>>> l = [[]]*5
>>> for i in l:
    print id(i)


42277424
42277424
42277424
42277424
42277424
>>> 
>>> l[0].append(1)
>>> l
[[1], [1], [1], [1], [1]]
>>> id(1)
32851648
>>> for lst in l:
    for item in lst:
        print 'item : {0}, list : {1}'.format(id(item), id(lst))


item : 32851648, list : 42277424
item : 32851648, list : 42277424
item : 32851648, list : 42277424
item : 32851648, list : 42277424
item : 32851648, list : 42277424

如您所见,l实际上对一个对象[]有五个相同的引用。因此,如果您更改其中任何一个,您将看到对其余项目的影响相同