2016-09-25 59 views
2

我遇到了一个Python附加到列表中的问题。我实现的代码为:python如何追加列表工作?

a=[1,2] 
b=[3,4] 
a.append(b) 
b.append(5) 
print a 
print b 

我的Python追加的理解是,这段代码的预期产出将是:

期望输出

a=[1,2,[3,4]] 
b=[3,4,5] 

但实际产量是不同的东西。 实际输出

a=[1,2,[3,4,5]] 
b=[3,4,5] 

我只是想知道为什么发生这种情况。

因为我附名单ba,追加5b之前,名单a应该有[1,2,[3,4]]

回答

8

Python的名字是references,并追加到一个列表添加到同一对象的引用。

换句话说,您没有追加b列表的副本。该a列表和名称b共享一个参考的同一目标:

>>> a = [1, 2] 
>>> b = [3, 4] 
>>> a.append(b) 
>>> a[-1] is b # is tests if two references point to the same object 
True 
>>> id(a[-1]), id(b) # id produces a unique number per object 
(4595716320, 4595716320) 

如果预计到b列表的副本添加到a,明确地这样做:

a.append(b[:]) 

a.append(list(b)) 

How to clone or copy a list?

+0

'Python名称是引用,并且附加到列表将附加引用到同一个对象。' - 非常重要 –