Maison > développement back-end > Tutoriel Python > Pourquoi l'opérateur « is » se comporte-t-il différemment avec les entiers non mis en cache à l'intérieur et à l'extérieur des fonctions en Python ?

Pourquoi l'opérateur « is » se comporte-t-il différemment avec les entiers non mis en cache à l'intérieur et à l'extérieur des fonctions en Python ?

Linda Hamilton
Libérer: 2024-11-02 16:42:29
original
748 Les gens l'ont consulté

Why does the `is` operator behave differently with non-cached integers inside and outside functions in Python?

L'opérateur is se comporte de manière inattendue avec des entiers non mis en cache


L'opérateur is en Python est utilisé pour comparer l'identité de deux objets, ce qui signifie qu’il vérifie s’ils font référence au même objet en mémoire. Cependant, lorsqu'il s'agit d'entiers non mis en cache, l'opérateur is peut se comporter de manière inattendue.


Si vous évaluez l'opérateur is sur deux entiers dans une fonction, il renverra True, indiquant qu'ils font référence au même objet. Cependant, si vous évaluez le même opérateur is en dehors de la fonction, il renverra False, indiquant qu'ils font référence à des objets différents.


Cela est dû à la façon dont Python gère la mise en cache des entiers. Pour les entiers compris dans la plage [-5, 256], Python met en cache les objets entiers et les réutilise pour des références ultérieures. Cela signifie que lorsque vous attribuez un entier compris dans cette plage à plusieurs variables d'une fonction, elles font toutes référence au même objet mis en cache et, par conséquent, l'opérateur is renvoie True.


Cependant, lorsque vous attribuez un entier en dehors d'une fonction, cela crée un nouvel objet entier et n'utilise pas l'objet mis en cache. Par conséquent, lorsque vous comparez deux entiers en dehors d'une fonction, ils font référence à des objets différents et l'opérateur is renvoie False.


Pour éviter ce comportement inattendu, il est recommandé d'utiliser l'opérateur d'égalité (==) pour comparer les valeurs d'entiers, plutôt que l'opérateur is.

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