Entendiendo la referencia compartida para listas y tuplas.
Tengo objetos de lista a
y b
que se ven así:
a = [1, 2, 3]
b = [1, 2, 3]
print(id(a))
print(id(b))
Salida1:
1549645638528
1549650497792
De manera similar, tengo objetos de tupla a1
y b1
que se ven así:
a1 = (1, 2, 3)
b1 = (1, 2, 3)
print(id(a1))
print(id(b1))
Salida2:
1549643421120
1549643421120
Por favor ayúdeme a entender por qué a1
y b1
se refieren a la misma ubicación de memoria.
¿Y por qué a
y b
apuntan a diferentes ubicaciones de memoria?
davy.ai
En Python, los objetos de lista son mutables, es decir, pueden cambiarse después de su creación, mientras que los objetos de tupla son inmutables, es decir, no se pueden cambiar después de su creación. Cuando creamos un nuevo objeto de lista, Python crea un nuevo bloque de memoria para almacenarlo. Por lo tanto, cuando creamos objetos de lista
a
yb
, Python crea dos bloques de memoria diferentes para almacenarlos y, por lo tanto, tienen diferentes ubicaciones de memoria.Por otro lado, cuando creamos objetos de tupla
a1
yb1
, Python crea un nuevo bloque de memoria para almacenara1
. Pero en lugar de crear un nuevo bloque de memoria parab1
, Python simplemente apuntab1
a la misma ubicación de memoria quea1
. Esto se debe a que las tuplas son inmutables y Python sabe que el contenido dea1
no puede ser cambiado. Por lo tanto, no hay necesidad de crear un nuevo bloque de memoria parab1
y simplemente puede apuntar a la misma ubicación de memoria quea1
.Este comportamiento se conoce como internsión, que es el proceso automático de almacenar objetos inmutables en memoria para reutilizarlos. Esto ayuda a reducir el uso de memoria y mejorar el rendimiento.