
¿Por qué id(1) == id(2-1)?#
var = 1
print(id(var)) # ej. 9793088
print(id(1)) # mismo id
print(id(2-1)) # mismo id
print(id(2)) # distinto idid()devuelve la identidad del objeto (en CPython suele ser la dirección en memoria).- CPython tiene caching/interning de enteros pequeños (por defecto -5 a 256). Esos objetos se crean una vez y se reutilizan, por eso
1, la variablevarcon valor1y la expresión2-1apuntan al mismo objeto. - Los enteros son inmutables, así que compartir la misma instancia es seguro.
- No confiar en
ispara comparar valores numéricos; usar==para comparar igualdad. is solo debe usarse para comparar identidad (por ejemplo,is None).
Lección clave#
Python es un lenguaje increíblemente poderoso, pero conocer estos detalles te ayuda a evitar bugs difíciles de detectar.
También publicado en LinkedIn.
