Un comportement erratique de "est" expressions en python.
>>> 258 -1 == 257 True
4 Réponses :
est code> compare l'identité d'objet et les rendements true code> uniquement si les deux côtés sont le même objet. Pour des raisons de performances, Python maintient un "cache" de petits entiers et les réutilise, de sorte que tous les objets int (1) code> sont le même objet. Dans CPPHON, les entiers mis en cache vont de -5 à 255, mais il s'agit d'un détail de mise en œuvre, vous ne devez donc pas compter sur elle. Si vous souhaitez comparer l'égalité, utilisez == code>, pas est code>. P>
Vous pouvez également obtenir ce genre de chose qui se passe avec des chaînes lorsque les littéraux à chaîne sont mis en cache jusqu'à une certaine taille. Et des choses comme foo = "foo"; foo est foo.strip () code> peut retourner vrai code> aussi.
le python Cela reviendra vrais pour les "petits" entiers dues à un cache interne maintenu par Python, mais deux numéros avec la même valeur ne retourneront pas vrai si par rapport à est code> opérateur chèques Pour Identité d'objet em>, pas de valeur d'objet. Les deux entiers doivent se référer à l'objet même réel en interne pour le retour. P>
est code> en général. P>
à partir du DOCS : P> Les opérateurs mais de petits entiers (-5 à 256) et de petites chaînes sont mis en cache par Python: pourquoi (0-6) est -6 = faux? p> est code> est utilisé pour la vérification de l'identité, pour vérifier si les deux variables pointent sur le même objet,
tandis que == code> est utilisé pour vérifier les valeurs.
sont code> et ne sont pas code> test pour l'identité d'objet: x is y code> est true code>
Si et seulement si x et y sont le même objet. x n'est pas y code> donne le
Valeur de vérité inverse. P>
blockquote>
Le Essayez d'utiliser est code> vérifie l'option d'objet: L'objet créé en appelant 258-1 code> n'est pas le même objet que celui créé par 257 code >. L'opérateur == code> si les valeurs des objets comparés sont les mêmes. P>
Aide ('is') code>. p>
Alors pourquoi 2-1 est-ce que 1 retourne vrai?
@Rahul Python cache quelques petits entiers et petites chaînes, voir: Stackoverflow.com/questions/11476190 / why-0-6-is-6-faux
Répondu ici: Stackoverflow.com/a/16615952/2237320
>>> 2-1 est 1 code> renvoietrue code> lol@carlosdc n'est pas exactement un duplicata. Depuis cela fonctionne pour d'autres chiffres. C'est pourquoi j'ai demandé.
@Rahul rendez cela clair dans votre question.
Comme Ashwini a souligné. Cette question: Stackoverflow.com/Questtions/11476190/Why-0-6-IS-6 -false est plus proche de la mienne.