¿Por qué Python maneja '1 es 1 ** 2' de manera diferente a '1000 es 10 ** 3'?
Inspirado poresta pregunta sobre el almacenamiento en caché de enteros pequeños y cadenas descubrí el siguiente comportamiento que no entiendo.
>>> 1000 is 10**3
False
Pensé que entendía este comportamiento: 1000 es demasiado grande para ser almacenado en caché. 1000 y 10 ** 3 puntos a 2 objetos diferentes. Pero me equivoqué:
>>> 1000 is 1000
True
Entonces, tal vez Python trata los cálculos de manera diferente a los enteros 'normales'. Pero esa suposición tampoco es correcta:
>>> 1 is 1**2
True
¿Cómo se puede explicar este comportamiento?