Quelle est la différence entre "is" et "==" en python? [dupliquer]
Question
Double possible:
Python & # 8216; == & # 8217; vs & # 8216; is & # 8217; En comparant les chaînes, & # 8216; est & # 8217; échoue parfois, pourquoi?
Est-ce que
a == b
identique à
a is b
?
Si non, quelle est la différence?
Modifier: Pourquoi
a = 1
a is 1
renvoie True, mais
a = 100.5
a is 100.5
renvoie False?
La solution
Non, ce ne sont pas les mêmes. is
est une vérification de l'identité de l'objet - c.-à-d. si a
et b
sont exactement le même objet. Exemple:
a = 100.5
a is 100.5 # => False
a == 100.5 # => True
a = [1,2,3]
b = [1,2,3]
a == b # => True
a is b # => False
a = b
a == b # => True
a is b # => True, because if we change a, b changes too.
Donc: utilisez ==
si vous voulez dire que les objets doivent représenter la même chose (utilisation la plus courante) et si est
si vous voulez dire que les objets doivent être identiques mémoire (vous sauriez si vous aviez besoin de ce dernier).
De même, vous pouvez surcharger ==
via l'opérateur __ eq __
, mais vous ne pouvez pas surcharger =
.
Autres conseils
Comme déjà très clairement expliqué ci-dessus.
est : utilisé pour le test d'identité ("objets" identiques)
== : utilisé pour le test d'égalité (~~ valeur identique)
N'oubliez pas non plus que Python utilise l'internement des chaînes (à titre d'optimisation) pour vous permettre d'obtenir les étranges effets secondaires suivants:
>>> a = "test"
>>> b = "test"
>>> a is b
True
>>> "test_string" is "test" + "_" + "string"
True
>>> a = 5; b = 6; c = 5; d = a
>>> d is a
True # --> expected
>>> b is a
False # --> expected
>>> c is a
True # --> unexpected