2015-11-29 8 views
6

Mein Dozent hat mehrere Fragen zu Python gestellt, und dieser hat mich verwirrt, ich verstehe nicht, was passiert.Warum erweitert Python die Ausgabe [[...]]

x = [[]] 
x[0].extend(x) 

Python sagt mir, nach dem Ausführen das, dass x [[...]] ist, was bedeutet die ... bedeuten?

ich noch mehr verwirrt, wenn das Ergebnis der folgenden nur ist [[]]

y = [] # equivalent to x[0] 
x = [[]] 
y.extend(x) 

Wenn y berechnet werden [[]] sollte x nicht einfach berechnet werden, um [[[]]] zu sein?

Was ist Extend? und was bedeutet die ...?

+0

Da 'x' sich selbst bezeichnet, ist' str (x) 'eine Endlosschleife. Es ist schön, dass Python es fängt. – tdelaney

Antwort

6

Die ... zeigt an, dass die Liste eine rekursive Schleife enthält, d. H. Auf einer Ebene enthält etwas sich selbst. Dies liegt daran, dass Sie x mit x erweitert haben, so dass Sie im Wesentlichen x in sich selbst setzen.

Im zweiten Beispiel gibt es kein ..., da y ein eindeutiges Objekt ist. Obwohl es zufällig gleich zu x[0] darin ist, dass beide leere Listen sind, sind sie nicht die gleiche leere Liste.

+0

Also, indem 'x [0]' mit 'x' erweitert wird, wird ein Verweis auf' x' bei 'x [0]' erzeugt, anstatt die Daten, die 'x' enthält, in' x [0] '? ist das richtig? – CGA1123

+1

@ CGA1123: Grundsätzlich ja. (Genauer gesagt, es erzeugt einen Verweis auf 'x [0]' innerhalb der Liste bei 'x [0]', da 'extend 'den Inhalt seines Arguments und nicht das Argument selbst hinzufügt. Aber Sie haben Recht, dass es ist Erstellen eines Verweises auf das gleiche Objekt, kein Kopieren von Daten, und das ist der Schlüssel.) – BrenBarn

+0

Ah richtig, danke! – CGA1123