Ну смотри, здесь вся история про оптимизацию. В целях оптимизации str, int, и float. Указывают на один и тот же объект. Так как это не мутабельные типы данных, то сторонних эффектов нет.
Так вот когда, ты запускаешь все это дело скриптом, то эту оптимизацию, проще проводить, поскольку весь скрипт сначала парсится в строку, и на этом этапе python понимает что он может что то оптимизировать. А в интерактивном python каждая строка запускается по отдельности, и данный процесс на много сложнее осуществить.
Если ты сделаешь числа по меньшее, то он тебе и в интерактивном и если запускать через один и тот же скрипт выдаст один и тот id. например 11.