Я знаю, что некоторые младшие целые числа являются одиночными в Python, а более высокие — нет:
Код: Выделить всё
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 1000000
>>> b = 1000000
>>> a is b
False
Код: Выделить всё
>>> a = 0.0
>>> b = 0.0
>>> a is b
False
Код: Выделить всё
>>> a = "1024"
>>> b = "1024"
>>> a is b
True
Код: Выделить всё
>>> a = str(2**10)
>>> b = str(2**10)
>>> a is b
False
Код: Выделить всё
>>> a = (1,2,3)
>>> b = (1,2,3)
>>> a is b
False
- Это поведение преднамеренное или это просто следствие реализации, которая считается несущественной?
- Если это следствие реализации, то почему оно отличается для строк от кортежей, отличается для строк от чисел с плавающей запятой и как оно вообще может зависеть от способа создания строки?
- Бывают ли случаи, когда мы должны знать об этом поведении, помимо использования == для сравнения неизменяемых объектов? (Я знаю один случай, когда много лет назад я использовал C для ускорения работы с целыми числами, и в итоге я изменил число 1 для всего интерпретатора Python)