Maison >développement back-end >Tutoriel Python >Pourquoi l'opérateur « is » de Python se comporte-t-il différemment avec les petits et les grands entiers ?

Pourquoi l'opérateur « is » de Python se comporte-t-il différemment avec les petits et les grands entiers ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-24 04:56:14589parcourir

Why Does Python's `is` Operator Behave Differently with Small and Large Integers?

Le comportement déroutant de l'opérateur 'is' avec des entiers

En Python, l'opérateur 'is' vérifie si deux objets font référence au même objet en mémoire. Bien que cela fonctionne généralement comme prévu, il présente un comportement inattendu avec les entiers, ce qui entraîne une confusion parmi les développeurs.

Résultat inattendu avec les grands entiers

Considérez le code suivant :

a = 256
b = 256
a is b  # True (expected)
a = 257
b = 257
a is b  # False (unexpected)

Pourquoi l'opérateur « est » renvoie-t-il False dans la deuxième comparaison ? 257 n'est-il pas égal à 257 ?

Détails de l'implémentation de CPython

Le comportement étrange provient d'un détail d'implémentation subtil dans CPython, l'interpréteur Python le plus courant. Pour les entiers compris entre -5 et 256, CPython gère un tableau d'objets entiers. Lorsque vous créez un entier dans cette plage, vous obtenez simplement une référence à l'objet existant dans le tableau. Cela signifie que pour les petits entiers compris dans cette plage, l'opérateur « est » vérifie s'ils font référence au même objet dans le tableau.

Conséquences et implications

Dans le Dans l'exemple ci-dessus, lorsque nous attribuons 256 à a et b, nous recevons le même objet du tableau. Par conséquent, « a est b » est évalué à True. Cependant, lorsque nous attribuons 257 à a et b, nous créons deux nouveaux objets qui ne sont pas identiques, ce qui fait que « a is b » renvoie False.

Méthode de comparaison alternative

Pour comparer l'égalité de deux objets arbitraires, quel que soit leur type, vous pouvez utiliser l'opérateur '==' au lieu de 'is'. Cela vérifiera les valeurs des objets plutôt que leur identité.

a = 257
b = 257
a == b  # True

N'oubliez pas que l'opérateur « est » ne doit être utilisé que lorsque vous devez vérifier si deux objets font référence exactement au même objet en mémoire, tandis que '==' doit être utilisé pour comparer les valeurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn