124 votes

Comprendre l'opérateur "is

El is ne correspond pas aux valeurs des variables, mais l'opérateur instances elles-mêmes.

Qu'est-ce que cela signifie vraiment ?

J'ai déclaré deux variables nommées x y y en affectant les mêmes valeurs aux deux variables, mais il renvoie un résultat faux lorsque j'utilise la fonction is opérateur.

J'ai besoin d'une clarification. Voici mon code.

x = [1, 2, 3]
y = [1, 2, 3]

print(x is y)  # It prints false!

4voto

Nizam Mohamed Points 2921

x is y est identique à id(x) == id(y) en comparant l'identité des objets.

Comme @tomasz-kurgan l'a souligné dans le commentaire ci-dessous is L'opérateur se comporte de manière inhabituelle avec certains objets.

Par exemple

>>> class A(object):
...   def foo(self):
...     pass
... 
>>> a = A()
>>> a.foo is a.foo
False
>>> id(a.foo) == id(a.foo)
True

Réf ;
https://docs.python.org/2/reference/expressions.html#is-not
https://docs.python.org/2/reference/expressions.html#id24

3voto

CS Gamer Points 215

Comme vous pouvez le vérifier ici à un petit nombre d'entiers. Les nombres supérieurs à 257 ne sont pas des petits entiers, ils sont donc calculés comme un objet différent.

Il est préférable d'utiliser == à la place dans ce cas.

Pour plus d'informations, cliquez ici : http://docs.python.org/2/c-api/int.html

2voto

Neko Points 655

X pointe vers un tableau, Y pointe vers un autre tableau. Ces tableaux sont identiques, mais le is va regarder ces pointeurs, qui ne sont pas identiques.

1voto

mipadi Points 135410

Elle compare l'identité des objets, c'est-à-dire qu'elle vérifie si les variables font référence au même objet en mémoire. C'est comme le == en Java ou en C (lors de la comparaison de pointeurs).

1voto

ForsakenOne Points 11

Un exemple simple avec des fruits

fruitlist = [" apple ", " banana ", " cherry ", " durian "]
newfruitlist = fruitlist
verynewfruitlist = fruitlist [:]
print ( fruitlist is newfruitlist )
print ( fruitlist is verynewfruitlist )
print ( newfruitlist is verynewfruitlist )

Sortie :

True
False
False

Si vous essayez

fruitlist = [" apple ", " banana ", " cherry ", " durian "]
newfruitlist = fruitlist
verynewfruitlist = fruitlist [:]
print ( fruitlist == newfruitlist )
print ( fruitlist == verynewfruitlist )
print ( newfruitlist == verynewfruitlist )

Le résultat est différent :

True
True
True

C'est parce que l'opérateur == ne compare que le contenu de la variable. Pour comparer les identités de 2 variables, utilisez l'opérateur est opérateur

Pour imprimer le numéro d'identification :

print ( id( variable ) )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X