我有以下代码作为问题。
list = [ [ ] ] * 5
print list
list[0].append(1)
print list
第一行打印[[][][][][]]
,这是它应该打印的内容
但第二个印刷品给出了
[[1][1][1][1][1]]
为什么会这样?它应该只附加到第一个列表。
答案 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
实际上对一个对象[]
有五个相同的引用。因此,如果您更改其中任何一个,您将看到对其余项目的影响相同