Maison  >  Article  >  développement back-end  >  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
Linda Hamiltonoriginal
2024-11-02 16:42:29612parcourir

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!

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