Nein, Variablen in Python sind nicht Zeiger.
Sie verweisen stattdessen auf Objekte auf einem Heap, und das Zuweisen zu einer Variablen ändert nicht das referenzierte Objekt, sondern die Variable. Variablen und Objekte sind wie Labels, die an Ballons gebunden sind. Die Zuweisung verschiebt das Label stattdessen an einen anderen Ballon.
Sehen Sie diese previous answer of mine, um diese Idee von Ballons und Labels ein wenig mehr zu erkunden.
Das heißt, einige Objekte Typen implementieren spezifische In-Place-Addition Verhalten. Wenn das Objekt veränderbar ist (der Ballon selbst kann sich ändern), dann kann ein in-place add könnte als eine Mutation statt einer Zuordnung interpretiert werden.
Also, für ganze Zahlen, item += 1
ist wirklich das gleiche wie item = item + 1
, weil ganze Zahlen unveränderlich sind. Sie haben, um ein neues ganzzahliges Objekt zu erstellen und das item
-Label an das neue Objekt zu binden.
Listen auf der anderen Seite, sind wandelbar und lst += [other, items]
als lst.__iadd__([other, items])
umgesetzt und das verändert den lst
Ballon selbst. Eine Zuweisung findet noch statt, aber es ist eine Neuzuweisung des gleichen Objekts, da die .__iadd__()
Methode self
anstelle eines neuen Objekts einfach zurückgibt. Am Ende binden wir das Etikett an den gleichen Ballon an.
Die Schleife gibt Ihnen einfach einen Verweis auf das nächste Element in der Liste bei jeder Iteration. Sie können nicht die ursprüngliche Liste selbst ändern (das ist nur ein weiterer Satz von Beschriftungstexten); Stattdessen erhalten Sie für jedes enthaltene Element ein neues Etikett.
Warum versuchst du es nicht einfach? –
Nein; macht das [vorherige Antwort von mir] (http://stackoverflow.com/questions/12080552/python-list-doesnt-reflect-variable-change-new-to-python/12080644#12080644) überhaupt Hilfe? –
Ich denke nicht, dass es den Wert chagen wird (konntest du es nicht versuchen?) –