Поскольку это неизменяемые объекты, не имеет значения, используется ли один и тот же объект повторно или нет для нескольких вхождений одного и того же значения, и будет ли это использоваться или нет, будет зависеть от реализации.
Фактически CPython всегда использует один и тот же идентификатор для небольших целых чисел (от -5 до 256). Для других жестко запрограммированных констант int / float он будет работать, если оба они определены в одном исходном файле, хотя, если вы попытаетесь импортировать из другого исходного файла, вы обнаружите, что это не тот же объект.
Очевидно для комплексных чисел идентификаторы не используются повторно - это то же самое, что и значения, генерируемые во время выполнения (за исключением небольших целых чисел, как указано выше).
Пример:
test1.py
from test2 import a, b
c = 3.5
d = 3.5
print(id(a), id(b), id(c), id(d))
test2.py
a = 3.5
b = 3.5
python test1.py
дает:
140082541875392 140082541875392 140082541875800 140082541875800
но если вы измените их на маленькие целые числа (с одинаковым значением), тогда все четыре будут тот же идентификатор.
Обратите внимание, что для жестко запрограммированных констант, введенных с помощью интерактивной оболочки python, он будет аналогичен тому, когда они определены в разных модулях - оптимизация использования одного и того же объекта не используется (кроме маленьких целых чисел):
>>> a = 3.5
>>> b = 3.5
>>> a is b
False