TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #126 653
Python по умолчанию кеширует числа int в диапазоне -5...256.
Думаю, это всем известный факт.

>>> a = 10
>>> b = 10
>>> a is b
True

>>> a = 270
>>> b = 270
>>> a is b
False

Но вот что интересно, это не сработает внутри модуля.

# matchtest.py ####
a = 270
b = 270
print(a is b)
# end file ########


>>> import matchtest
True

Почему одно и тоже работает по разному? Что за двойные стандарты?
Вот вам подсказка, в интерактивной консоли это можно повторить, запустив обе команды как одну.

>>> a = 270; b = 270
>>> a is b
True

А разница в том как интерпретатор получает код, точней какими порциями. Каждую "порцию" он "интерпретирует", попутно оптимизируя логику кода.
А оптимизация замечает нашу "бездарную писанину" и исправляет явные ошибки. Грубо говоря, такой код:

a = 270
b = 270

Превращается в нечто такое:

a = b = 270

Зачем создавать два одинаковых объекта когда можно создать один объект и две ссылки?

Если выполнять команды по отдельности то оптимизация не сработает, так как это отдельные объекты кода.
Если же это одна команда, введёная в консоль или код загружен из модуля, то интерпретатор увидит это как единый блок. Этап оптимизации изменит исходный код и это сведёт на нет наши исследования, выдав не то что мы ожидаем.

#triks
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →