В обычном 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.