Al realizar comparaciones de variables se pueden utilizar tanto == como is, aunque no funcionan de la misma manera. De manera general se tiene:

  • Se usa == para comparar valores. Se usa cuando se desea saber si dos variables tienen el mismo valor.
  • Se usa is para comparar objetos. Se usa cuando se desea saber si dos variables se refieren literalmente al mismo objeto.

Por ejemplo:

>>> a = 19999990
>>> b = 19999989 +1
>>> a is b
False
>>> a == b
True
>>> c = 500
>>> d = 500
>>> c is d
False
>>> c == d
True

En este caso a no es el mismo objeto que b pero tienen el mismo valor.

Nota: Debido a la forma en que funciona la implementación de referencia de CPython en enteros pequeños se pueden obtener resultados inconsistentes e inesperados si se usa is. Esto se debe a que la implementación de referencia de CPython cachea los enteros entre -5 a 256 (ambos incluidos) como una sola instancia para mejorar el rendimiento (provocando resultados erroneos).

Por ello si probamos con alguno de estos números ocurre lo siguiente:

>>> e = 250
>>> f = 250
>>> e is f
True
>>> e == f
True
>>> g = 257
>>> h = 257
>>> g is h
False
>>> g == h
True
>>>