Kommentar zu Wie kann ich umgehen, dass eine nicht verwendete Variable in einer for-Schleife deklariert wird? (Keine Kommentargröße mehr)
Python behält dieselbe Referenz für das erstellte Objekt bei. (unabhängig von der Veränderlichkeit), zum Beispiel
In [1]: i = 1
In [2]: j = 1
In [3]: id(i)
Out[3]: 142671248
In [4]: id(j)
Out[4]: 142671248
Sie können sowohl i als auch j sehen und sich auf dasselbe Objekt im Speicher beziehen. Was passiert, wenn wir den Wert einer unveränderlichen Variablen ändern?
In [5]: j = j+1
In [6]: id(i)
Out[6]: 142671248
In [7]: id(j)
Out[7]: 142671236
Sie können sehen, dass j jetzt beginnt, auf einen neuen Ort zu zeigen (wo 2 gespeichert ist), und i zeigt immer noch auf den Ort, an dem 1 gespeichert ist. Während der Bewertung
j = j+1
Der Wert wird aus 142671248 ausgewählt, berechnet (falls nicht bereits zwischengespeichert) und an einer neuen Position 142671236 abgelegt. J zeigt auf die neue Position. Einfacher ausgedrückt wird eine neue Kopie erstellt, die jedes Mal erstellt wird, wenn eine unveränderliche Variable geändert wird.
Wandlungsfähigkeit
Veränderliche Objekte verhalten sich in dieser Hinsicht kaum anders. Wenn der Wert durch zeigt
In [16]: a = []
In [17]: b = a
In [18]: id(a)
Out[18]: 3071546412L
In [19]: id(b)
Out[19]: 3071546412L
Sowohl a als auch b zeigen auf denselben Speicherort.
In [20]: a.append(5)
Der Speicherort, auf den a zeigt, wird geändert.
In [21]: a
Out[21]: [5]
In [22]: b
Out[22]: [5]
In [23]: id(a)
Out[23]: 3071546412L
In [24]: id(b)
Out[24]: 3071546412L
Sowohl a als auch b zeigen immer noch auf denselben Speicherort. Mit anderen Worten, veränderbare Variablen wirken auf denselben Speicherort, auf den die Variable zeigt, anstatt eine Kopie des Werts zu erstellen, auf den die Variable zeigt, wie im Fall einer unveränderlichen Variablen.