Python Language Comparaison par `is` vs` == `


Exemple

Un écueil courant confond les opérateurs de comparaison de l' égalité is et == .

a == b compare la valeur de a et b .

a is b comparera les identités de a et b .

Pour illustrer:

a = 'Python is fun!'
b = 'Python is fun!'
a == b # returns True
a is b # returns False

a = [1, 2, 3, 4, 5]
b = a      # b references a
a == b     # True
a is b     # True
b = a[:]   # b now references a copy of a
a == b     # True
a is b     # False [!!]

Fondamentalement, is peut être considéré comme un raccourci pour id(a) == id(b) .

Au-delà de cela, il existe des particularités de l'environnement d'exécution qui compliquent davantage les choses. Les chaînes courtes et les petits entiers renvoient True par rapport à is , car la machine Python tente d'utiliser moins de mémoire pour des objets identiques.

a = 'short'
b = 'short'
c = 5
d = 5
a is b # True
c is d # True

Mais les chaînes plus longues et les entiers plus grands seront stockés séparément.

a = 'not so short'
b = 'not so short'
c = 1000
d = 1000
a is b # False
c is d # False

Vous devez utiliser is de tester pour None :

if myvar is not None:
    # not None
    pass
if myvar is None:
    # None
    pass

Une utilisation de is de tester un "sentinelle" (c'est-à-dire un objet unique).

sentinel = object()
def myfunc(var=sentinel):
    if var is sentinel:
        # value wasn’t provided
        pass
    else:
        # value was provided
        pass