Pourquoi l'élément suivant se comporte-t-il de manière inattendue en Python ?
>>> a = 256
>>> b = 256
>>> a is b
True # This is an expected result
>>> a = 257
>>> b = 257
>>> a is b
False # What happened here? Why is this False?
>>> 257 is 257
True # Yet the literal numbers compare properly
J'utilise Python 2.5.2. En essayant différentes versions de Python, il semble que Python 2.3.3 présente le comportement ci-dessus entre 99 et 100.
Sur la base de ce qui précède, je peux émettre l'hypothèse que Python est implémenté en interne de telle sorte que les "petits" entiers sont stockés d'une manière différente de celle des grands entiers et que l'option de stockage de Python n'est pas utilisée. is
L'opérateur peut faire la différence. Pourquoi l'abstraction fuyante ? Quelle est la meilleure façon de comparer deux objets arbitraires pour voir s'ils sont identiques lorsque je ne sais pas à l'avance s'il s'agit de nombres ou non ?
2 votes
Jetez un coup d'œil aquí > L'implémentation actuelle conserve un tableau d'objets entiers pour tous les > entiers compris entre -5 et 256, lorsque vous créez un entier dans cette plage, vous > récupérez simplement une référence à l'objet existant.
3 votes
Il s'agit d'un détail d'implémentation spécifique à CPython et d'un comportement non défini, à utiliser avec précaution.
0 votes
Cela répond-il à votre question ? Y a-t-il une différence entre "==" et "est" ?