¿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?