Problèmes liés au pool d'objets statiques de petits nombres entiers

Sur le problème

  • Les objets entiers sont des objets immuables et le résultat des opérations sur les entiers est renvoyé en tant que nouvel objet, mais:
>>> a = 1 + 0
>>> b = 1 * 1
>>> id(a), id(b)
(4408209536, 4408209536)

>>> c = 1000 + 0
>>> d = 1000 * 1
>>> id(c), id(d)
(4410298224, 4410298160)

Le petit pool d'entiers Python crée des objets avec des nombres communs de -5 à 256 par défaut

  • Étant donné que le résultat du calcul de 1 + 0 est 1, dans la plage des petits entiers, Python récupère directement l'entier 1 dans le pool d'objets statiques; 1 * 1 est le même. Les noms a et b sont en fait liés au même objet, c'est-à-dire à l'entier 1 dans le petit pool d'objets entier, donc l'id est le même

  • Les résultats de calcul de 1000 + 0 et 1000 * 1 sont tous deux de 1000, mais comme 1000 n'est pas dans la plage des petits entiers, Python crée des objets séparément, de sorte que les identifiants d'objet de c et d sont différents

Je suppose que tu aimes

Origine blog.csdn.net/pythonstrat/article/details/108291092
conseillé
Classement