En python, existen 2 formas muy comunes en las cuales podemos comparar objetos. Podemos hacerlo mediante el doble signo igual (==) o utilizando la palabra reservada is. 😎
En primera instancia podemos llegar a pensar que ambas no son más que sinónimos, sin embargo, si profundizamos más en detalle, esto no es así. Existe un gran diferencia entre ellas, y aprender a diferenciarlas y conocer exactamente cómo y cuando utilizarlas sin duda no salvará de muchos aprietos. Veamos.
Comencemos con un pequeño ejemplo.
>>> [1, 2, 3] == [1, 2, 3]
>>> True
Si comparamos 2 listas que almacenen exactamente los mismos valores y en el mismo orden, utilizando el doble operador igual (==) obtendremos como resultado True, indicando que ambos valores son lo mismo.
Pero, ¿Qué pasa si reemplazamos == por is? ¿El resultado acaso será el mismo?
>>> [1,2,3] is [1,2,3]
>>> False
No, ahora el resultado es False.
A diferencia del doble signo igual (==), donde se compara que 2 los valores sean los mismos, con la palabra reservada is se compararan que 2 objetos sean los mismo. Cosas completamente diferentes. 🤯
Espera ¿Qué acaso los valores no son los objetos? La respuesta es no.
Veamos otro pequeño ejemplo.
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
Para este ejemplo hemos instanciado 2 objetos de tipo list (a y b), que si bien es cierto almacenan los mismos valores, son objetos diferentes, y podemos confirmarlo haciendo uso de la función id.
>>> id(a)
140377082809088
>>> id(b)
140377082809088
NOTA: El id de cada objeto no es más que un identificador único para nuestros sistema. Mediante el id podremos distinguir entre un objeto y otro.
Ahora, si comparamos los identificadores obtendremos como resultado False. Ya que ambos objetos no son los mismos.
>>> id(a) == id(b)
False
Por otro lado, si asignamos alias (una variable referencia a otra), los objetos serán los mismos.
>>> a = [1, 2, 3]
>>> b = a
>>> a is b
True
Si queremos negar usamos la palabra reservada not.
>>> b = a
>>> a is not b
False
Recuerda, en Python, a diferencia de otros lenguajes de programación, debes ver a las variables como etiquetas, y no como cajas dónde almacenar cosas. 🐍
Conclusión
Recordemos que el operador, doble signo igual (==) nos permite conocer si 2 valores son los mismos, a diferencia de la palabra reservada is, la cual nos permite conocer si 2 objetos son los mismos.