¿Cuál es la diferencia entre “no es ninguno” y “== ninguno”?

Hace poco me encontré con esta syntax, no soy consciente de la diferencia.

Apreciaría si alguien pudiera decirme la diferencia.

La respuesta se explica aquí .

Citar:

Una clase es libre de implementar la comparación de la manera que elija, y puede elegir hacer una comparación con Ninguna significa algo (lo que en realidad tiene sentido; si alguien le dijo que implementara el objeto Ninguna desde cero, ¿de qué otra manera lo haría para comparar la Verdad ¿Contra sí mismo?).

Hablando en términos prácticos, no hay mucha diferencia ya que los operadores de comparación personalizados son raros. Pero usted debe usar is None como una regla general.

 class Foo: def __eq__(self,other): return True foo=Foo() print(foo==None) # True print(foo is None) # False 

En este caso, son los mismos. None es un objeto singleton (solo existe uno).

is verificaciones para ver si el objeto es el mismo objeto, mientras que == simplemente verifica si son equivalentes.

Por ejemplo:

 p = [1] q = [1] p is q # False because they are not the same actual object p == q # True because they are equivalent 

Pero como solo hay un None , siempre serán los mismos y se devolverá Verdadero.

 p = None q = None p is q # True because they are both pointing to the same "None" 

Si usas numpy,

 if np.zeros(3)==None: pass 

le dará error cuando numpy hace la comparación elementalmente