web-dev-qa-db-fra.com

Quelle est la difference entre "is None" et "== None"

Je suis récemment tombé sur cette syntaxe, je ne suis pas conscient de la différence.

J'apprécierais que quelqu'un me dise la différence.

267
myusuf3

La réponse est expliquée ici .

Citer:

Une classe est libre d’appliquer la comparaison comme elle le souhaite et elle peut choisir de faire la comparaison avec None. contre lui-même?).

Pratiquement, il n'y a pas beaucoup de différence puisque les opérateurs de comparaison personnalisés sont rares. Mais vous devriez utiliser is None en règle générale.

245
Ben Hoffstein
class Foo:
    def __eq__(self,other):
        return True
foo=Foo()

print(foo==None)
# True

print(foo is None)
# False
124
unutbu

Dans ce cas, ils sont les mêmes. None est un objet singleton (il n'existe qu'un seul None).

is vérifie si l'objet est le même objet, tandis que == vérifie simplement s'ils sont équivalents.

Par exemple:

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

Mais comme il n'y a qu'un seul None, ils seront toujours les mêmes et is retournera True.

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

Si vous utilisez numpy,

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

vous donnera une erreur lorsque numpy fait la comparaison élémentaire

3
jf328