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
Libérer: 2024-12-24 04:56:14
original
538 Les gens l'ont consulté

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)
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal