Comparación de Python None: ¿Debo usar “is” o ==?

Posible duplicado:
¿Cuándo el operador `==` no es equivalente al operador `is`? (Pitón)

Estoy usando Python 2.x.

Mi editor me da un subrayado de ‘advertencia’ cuando comparo my_var == None , pero ninguna advertencia cuando uso my_var is None .

Hice una prueba en el shell de Python y determiné que ambas son syntax válida, pero mi editor parece estar diciendo que my_var is None .

¿Es este el caso, y si es así, por qué?

    Resumen:

    El uso is cuando desea verificar la identidad de un objeto (por ejemplo, verificar si var es None ). Use == cuando quiera verificar la igualdad (por ejemplo, ¿ var es igual a 3 ?).

    Explicación:

    Puedes tener clases personalizadas donde my_var == None devolverá True

    p.ej:

     class Negator(object): def __eq__(self,other): return not other thing = Negator() print thing == None #True print thing is None #False 

    is comprueba la identidad del objeto. Solo hay 1 objeto None , por lo que cuando lo haces, my_var is None , verificas si en realidad son el mismo objeto (no solo objetos equivalentes )

    En otras palabras, == es una verificación de equivalencia (que se define de un objeto a otro), mientras que is verificación de la identidad del objeto:

     lst = [1,2,3] lst == lst[:] # This is True since the lists are "equivalent" lst is lst[:] # This is False since they're actually different objects 

    Generalmente, se prefiere esto cuando se comparan objetos arbitrarios con singletes como None porque es más rápido y más predecible. Siempre se compara por la identidad del objeto, mientras que lo que hará == dependerá del tipo exacto de los operandos e incluso de su ordenamiento.

    Esta recomendación está respaldada por el PEP 8 , que establece explícitamente que “las comparaciones con singletons como Ninguna siempre deben hacerse con o is not , nunca con los operadores de igualdad”.

    PEP 8 define que es mejor usar el operador is cuando se comparan singletons.