То, что вы видите, - это деталь оптимизации CPython (наиболее распространенная реализация Python, которую вы получаете, если загружаете язык с python .org).
Поскольку маленькие целые числа используются так часто, CPython всегда сохраняет числа от -5 до 256 в памяти и использует эти сохраненные целые объекты всякий раз, когда эти числа появляются. Это означает, что все экземпляры, скажем, 5
будут иметь один и тот же адрес памяти.
>>> a = 5
>>> b = 5
>>> id(a) == id(b)
True
>>> c = 4
>>> id(a) == id(c)
False
>>> c += 1
>>> id(a) == id(c)
True
Это не будет верно для других целых или нецелых значений, которые создаются только при необходимости:
>>> a = 300
>>> b = 300
>>> id(a) == id(b)
False