Python id()

Python id() función devuelve la “identidad” del objeto. La identidad de un objeto es un número entero, garantizado de ser único y constante para este objeto durante su vida útil. Dos objetos con vidas no superpuestas pueden tener el mismo valor id(). En la implementación de CPython, esto es la dirección del objeto en la memoria.

Python id()

Python almacena en caché el valor id() de tipos de datos comúnmente utilizados, como cadena, entero, tuplas, etc. Por lo tanto, es posible que encuentres que varias variables se refieren al mismo objeto y tienen el mismo valor id() si sus valores son iguales. Veámoslo con un ejemplo.

# enteros
a = 10
b = 10
c = 11
d = 12

print(id(a))
print(id(b))
print(id(c))
print(id(d))

Salida:

4317900064
4317900064
4317900096
4317900128

Observa que el valor id() de ‘a’ y ‘b’ es el mismo, ya que tienen el mismo valor entero. Veamos si obtenemos un comportamiento similar con cadenas y tuplas también.

# tuples
t = ('A', 'B')
print(id(t))

t1 = ('A', 'B')
print(id(t1))

# strings
s1 = 'ABC'
s2 = 'ABC'
print(id(s1))
print(id(s2))

Salida:

4320130056
4320130056
4320080816
4320080816

Por la salida, es evidente que Python almacena en caché las cadenas y objetos de tuplas y las utiliza para ahorrar espacio en memoria.

El almacenamiento en caché solo funciona con objetos inmutables; observa que los enteros, cadenas y tuplas son inmutables. Así que la implementación de Python puede utilizar el almacenamiento en caché para ahorrar espacio en memoria y mejorar el rendimiento.

Sabemos que el diccionario no es inmutable, ¿veamos si id() es diferente para diferentes diccionarios incluso si los elementos son iguales?

# dict
d1 = {"A": 1, "B": 2}
d2 = {"A": 1, "B": 2}
print(id(d1))
print(id(d2))

Salida:

4519884624
4519884768

Como pensábamos, los objetos dict están devolviendo diferentes valores de id() y no parece haber almacenamiento en caché aquí.

id() de Python para objeto personalizado

Veamos un ejemplo simple de obtener el valor de id() para un objeto personalizado.

class Emp:
    a = 0


e1 = Emp()
e2 = Emp()

print(id(e1))
print(id(e2))

Salida:

4520251744
4520251856

Resumen

El valor de id() de Python está garantizado que sea único y constante para un objeto. Podemos usar esto para asegurarnos de que dos objetos estén haciendo referencia al mismo objeto en memoria o no.

Puedes revisar el script completo de Python y más ejemplos de Python desde nuestro Repositorio de GitHub.

Referencia: Documentación Oficial

Source:
https://www.digitalocean.com/community/tutorials/python-id