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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top