Commento a Come posso aggirare la dichiarazione di una variabile inutilizzata in un ciclo for? (Ran out of comment size)
Python mantiene lo stesso riferimento per l'oggetto creato. (indipendentemente dalla mutabilità), ad esempio,
In [1]: i = 1
In [2]: j = 1
In [3]: id(i)
Out[3]: 142671248
In [4]: id(j)
Out[4]: 142671248
Puoi vedere sia i che j, fare riferimento allo stesso oggetto in memoria. Cosa succede, quando cambiamo il valore di una variabile immutabile.
In [5]: j = j+1
In [6]: id(i)
Out[6]: 142671248
In [7]: id(j)
Out[7]: 142671236
puoi vedere che j ora inizia a indicare una nuova posizione, (dove è memorizzato 2), e i punta ancora alla posizione in cui è memorizzato 1. Durante la valutazione,
j = j+1
Il valore viene scelto da 142671248, calcolato (se non è già memorizzato nella cache) e inserito in una nuova posizione 142671236. j viene fatto puntare alla nuova posizione. In termini più semplici, viene creata una nuova copia ogni volta che viene modificata una variabile immutabile.
Mutabilità
Gli oggetti mobili agiscono in modo leggermente diverso a questo riguardo. Quando il valore indicato da
In [16]: a = []
In [17]: b = a
In [18]: id(a)
Out[18]: 3071546412L
In [19]: id(b)
Out[19]: 3071546412L
Sia a che b puntano alla stessa posizione di memoria.
In [20]: a.append(5)
La posizione di memoria indicata da a viene modificata.
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
Sia a che b, puntano ancora alla stessa posizione di memoria. In altre parole, le variabili mutabili agiscono della stessa locazione di memoria puntata dalla variabile, invece di fare una copia del valore puntato dalla variabile, come nel caso della variabile immutabile.