Думаю, это всем известный факт.
>>> 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