Проверка идентичности ссылок на огромные числа

В обычном CPython 3.13 выражение печатает False: огромная степень вычисляется дважды и даёт разные объекты. Но числовое равенство True, а идентичность таких значений не гарантируется языком.

Короткий ответ

Что ответить на собеседовании

В обычном CPython 3.13 выражение печатает False: огромная степень вычисляется дважды и даёт разные объекты. Но числовое равенство True, а идентичность таких значений не гарантируется языком.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо выяснить, указывают ли две переменные на один и тот же объект в памяти, используя оператор is.

x, y = 100**100, 100**100
print(x is y)

Ответ

В обычном CPython 3.13 выражение печатает False: огромная степень вычисляется дважды и даёт разные объекты. Но числовое равенство True, а идентичность таких значений не гарантируется языком.

Оптимизатор CPython ограничивает размер заранее вычисляемых целочисленных степеней, поэтому 100**100 в этом примере не превращается в одну общую константу.

print(x == y)  # True

Нельзя обобщать результат на все реализации и оптимизации Python. Оператор is нужен для проверки одного и того же объекта, не одинакового числового значения. Например, x = y = 100**100 уже явно связывает оба имени с одним результатом и даёт True при is.

Источник: raw.githubusercontent.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее