Operadores de Identidad
El operador de identidad o identity operator is
nos indica si dos variables hacen referencia al mismo objeto. Esto implica que si dos variables distintas tienen el mismo id()
, el resultado de aplicar el operador is
sobre ellas será True
.
Operador | Nombre |
---|---|
is | Devuelve True si hacen referencia a el mismo objeto |
is not | Devuelve False si no hacen referencia a el mismo objeto |
Operador is
El operador is
comprueba si dos variables hacen referencia a el mismo objeto. En el siguiente ejemplo podemos ver como al aplicarse sobre a
y b
el resultado es True
.
a = 10
b = 10
print(a is b) # True
Esto es debido a que Python reutiliza el mismo objeto que almacena el valor 10 para ambas variables. De hecho, si usamos la función id()
, podemos ver que el objeto es el mismo.
print(id(a)) # 4397849536
print(id(b)) # 4397849536
Podemos ver como también, ambos valores son iguales con el operador relacional ==
, pero esto es una mera casualidad como veremos a continuación. Que dos variables tengan el mismo contenido, no implica necesariamente que hagan referencia a el mismo objeto.
print(a == b) # True
En el siguiente ejemplo, podemos ver como a
y b
almacenan el mismo valor, por lo que ==
nos indica True
.
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True
print(a is b) # False
Sin embargo, por como Python funciona por debajo, almacena el contenido en dos objetos diferentes. Al tratarse de objetos diferentes, esto hace que el operador is
devuelva False
.
A diferencia de antes, podemos ver como la función id()
en este caso nos devuelve un valor diferente.
print(id(a)) # 4496626880
print(id(b)) # 4496626816
Esta diferencia puede resultar algo liosa, por lo que te recomendamos que leas más acerca de la mutabilidad en Python.
Para saber más: Si quieres saber más acerca del operador id() te dejamos este enlace a la documentación oficial.
Operador is not
Una vez definido is
, es trivial definir is not
porque es exactamente lo contrario. Devuelve True
cuando ambas variables no hacen referencia al mismo objeto.
# Python crea dos objetos diferentes, uno
# para cada lista. Las listas son mutables.
a = [1, 2, 3]
b = [1, 2, 3]
print(a is not b) # True
# Python reutiliza el objeto que almacena 5
# por lo que ambas variables apuntan a el mismo
a = 5
b = 5
print(a is not b) # False
Para saber más: Te dejamos un enlace muy interesante con más información sobre el is y is not.