Интернирование строк и малых целых
Python
Senior
Яндекс
Почему в Python иногда `a is b` для маленьких чисел или коротких строк возвращает `True`? Можно ли полагаться на это поведение?
Ответы
Интернирование
CPython интернирует некоторые объекты: малые целые (`-5..256`) и некоторые строковые литералы могут кэшироваться и переиспользоваться. Поэтому `a is b` может быть `True` для `a = 10; b = 10`.
Но это деталь реализации, а не часть контракта языка. Нельзя полагаться на неё в логике программы. Для проверки равенства значений нужно использовать `==`, а `is` — только для сравнения с `None` и другими singleton-объектами.