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