Comentar ¿Cómo puedo evitar declarar una variable no utilizada en un bucle for? (Se acabó el tamaño del comentario)
Python mantiene la misma referencia para el objeto creado. (independientemente de la mutabilidad), por ejemplo,
In [1]: i = 1
In [2]: j = 1
In [3]: id(i)
Out[3]: 142671248
In [4]: id(j)
Out[4]: 142671248
Puede ver que tanto i como j se refieren al mismo objeto en la memoria. Qué sucede cuando cambiamos el valor de una variable inmutable.
In [5]: j = j+1
In [6]: id(i)
Out[6]: 142671248
In [7]: id(j)
Out[7]: 142671236
puede ver que j ahora comienza a señalar una nueva ubicación (donde se almacena 2), y todavía apunta a la ubicación donde se almacena 1. Mientras evalúa,
j = j+1
El valor se toma de 142671248, se calcula (si aún no se ha almacenado en caché) y se coloca en una nueva ubicación 142671236. Se hace que j apunte a la nueva ubicación. En términos más simples, se realiza una nueva copia cada vez que se modifica una variable inmutable.
Mutabilidad
Los objetos mutables actúan de forma poco diferente a este respecto. Cuando el valor señalado por
In [16]: a = []
In [17]: b = a
In [18]: id(a)
Out[18]: 3071546412L
In [19]: id(b)
Out[19]: 3071546412L
Tanto a como b apuntan a la misma ubicación de memoria.
In [20]: a.append(5)
Se modifica la ubicación de la memoria señalada por a.
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
Tanto a como b, aún apuntan a la misma ubicación de memoria. En otras palabras, las variables mutables actúan en la misma ubicación de memoria apuntada por la variable, en lugar de hacer una copia del valor apuntado por la variable, como en el caso de variable inmutable.