Il y a une règle simple pour vous dire quand utiliser ==
ou is
.
-
==
est pour la valeur de l'égalité. L'utiliser quand vous voulez savoir si deux objets ont la même valeur.
-
is
est pour la référence à l'égalité. L'utiliser quand vous voulez savoir si deux références se rapportent au même objet.
En général, lorsque vous comparez quelque chose à un type simple, vous êtes généralement la vérification de la valeur de l'égalité, de sorte que vous devez utiliser ==
. Par exemple, l'intention de votre exemple est sans doute pour vérifier si x a une valeur égale à 2 (==
), de ne pas s' x
est littéralement référence au même objet que 2.
Autre chose à noter: en raison de la façon dont le Disponible de référence de mise en œuvre de travaux, vous aurez inattendus et des résultats incohérents si par erreur vous utilisez is
à comparer par référence à l'égalité sur des entiers:
>>> a = 500
>>> b = 500
>>> a == b
True
>>> a is b
False
C'est à peu près ce que nous attendions: a
et b
ont la même valeur, mais sont des entités distinctes. Mais que penser de cela?
>>> c = 200
>>> d = 200
>>> c == d
True
>>> c is d
True
Cela est incompatible avec le résultat antérieur. Ce qui se passe ici? Il s'avère que l'implémentation de référence de Python caches entier des objets dans la plage de -5..256 en tant que singleton cas pour des raisons de performances. Voici un exemple illustrant ce:
>>> for i in range(250, 260): a = i; print "%i: %s" % (i, a is int(str(i)));
...
250: True
251: True
252: True
253: True
254: True
255: True
256: True
257: False
258: False
259: False
C'est une autre raison évidente de ne pas utiliser is
: le comportement est à gauche jusqu'à implémentations lorsque vous êtes à tort de l'utiliser pour la valeur de l'égalité.