2012-03-31 13 views
-1

Mögliche Duplizieren:
Python list append behaviorPython verschachtelte Listen

Warum funktioniert dieser Code:

x = [[]]*3 
x[0].append('a') 
x[1].append('b') 
x[2].append('c') 
x[0]=['d'] 

print x 

Druck [[ 'd'] [ 'a', ' b ',' c '], [' a ',' b ',' c ']]?

+1

Diese Frage wird buchstäblich einmal am Tag gestellt ... Das Problem scheint zu sein, dass Sie nicht nach der Lösung suchen können, wenn Sie nicht bereits wissen, was vor sich geht. –

+0

um ein solches Verhalten zu verbieten, ist es besser Listen mit der folgenden Syntax zu erstellen: >>> x = [[] für _ im Bereich (3)] –

Antwort

5

Dies wird am besten Schritt für Schritt erklärt:

 
>>> x = [[]]*3 
>>> x 
[[], [], []] 
>>> x[0].append('a') 
>>> x 
[['a'], ['a'], ['a']] 
>>> x[1].append('b') 
>>> x 
[['a', 'b'], ['a', 'b'], ['a', 'b']] 
>>> x[2].append('c') 
>>> x 
[['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']] 
>>> x[0]=['d'] 
>>> x 
[['d'], ['a', 'b', 'c'], ['a', 'b', 'c']] 

Die erste Anweisung erstellt in eine Liste mit drei Referenzen auf das gleiche Element. Wenn Sie also das erste Element ändern, ändern Sie auch das zweite und dritte Element. Daher fügen die append-Anweisungen jedem Element der Liste eine Zahl hinzu.

+0

Ich weiß, dass es verlockend ist, aber es gibt bereits 50 gute Antworten auf diese Frage . Verknüpfen Sie einfach eine Duplikate in einem Kommentar und/oder kennzeichnen Sie sie als Duplikat, bis Sie genug Repräsentanten haben, um zu schließen. – agf

+0

Operator * auf den Listen handeln macht flache Kopien - das heißt. – sashab

Verwandte Themen