2016-09-25 1 views
2

Ich stieß auf ein Problem in Python an eine Liste anfügen. Der Code, den ich umgesetzt wurde:Wie fügt sich Python an die Liste an?

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

Mein Verständnis von Python append war, dass die erwartete Ausgabe dieses Codes würde:

Erwartete Ausgabe

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

Aber die tatsächliche Leistung ist etwas anderes. tatsächliche Output

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

Ich möchte nur wissen, warum dies passiert ist.

Da ich die Liste b-a angehängt, bevor 5-b, Liste anhängen a sollte [1,2,[3,4]]

Antwort

8

Python Namen references sind hat, und fügt auf das gleiche Objekt einen Verweis auf eine Liste angehängt wird.

Mit anderen Worten, Sie haben keine Kopie der b Liste angefügt. Die a Liste und der Name b Aktien ein Verweis auf ein und dasselbe Objekt:

>>> 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) 

Wenn Sie a, eine Kopie der b Liste zu erwarten, so explizit tun:

a.append(b[:]) 

oder

a.append(list(b)) 

Siehe How to clone or copy a list?

+0

'Python-Namen sind Referenzen, und das Anhängen an eine Liste hängt einen Verweis auf dasselbe Objekt an.' - wirklich wichtig –

Verwandte Themen