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!