Deux mécanismes d'optimisation internes à Python.
Certains objets sont uniques en mémoire — toujours le même id() quelle que soit la variable qui y pointe.
Concernés : True, False, None.
id(True) # → 4304888192
id(True) # → 4304888192 (même id)
c = True
id(c) # → 4304888192 (toujours le même)
Vs. un entier grand :
id(500) # → 4533077808
id(500) # → 4533078288 (objet différent à chaque fois)
Les entiers entre -5 et 256 sont pré-alloués au démarrage de Python : même comportement que les singletons.
id(5) # → 4305279584
id(5) # → 4305279584 (même objet)
Les courtes chaînes (généralement < 20 caractères) sont également mises en cache :
a = "bonjour"
b = "bonjour"
id(a) == id(b) # → True
Ces optimisations sont transparentes dans le code quotidien. Les connaître permet de comprendre les comportements inattendus avec
isvs==.