Интерпретатор умный



Перед запуском он проходится по файлу и смотрит на первые значения переменных (a = "string"), которые потом подставляет на месте повторений (если это неизменяемый тип данных).



Именно поэтому, когда вы выполняете код в интерактивном интерпретаторе и как скрипт, результат может отличаться.



#объяснение