Интернирование позволяет строкам разделять один объект, а кеш малых целых — повторно использовать заранее созданные объекты. is проверяет идентичность, поэтому равные значения не обязаны давать True.
Как устроен под капотом механизм интернирования строк (string interning) и кэширования малых целых чисел (small integer caching) в CPython? В каких случаях оператор is вернёт True для одинаковых значений, а в каких — False?
Интернирование позволяет строкам разделять один объект, а кеш малых целых — повторно использовать заранее созданные объекты. is проверяет идентичность, поэтому равные значения не обязаны давать True.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Интернирование позволяет строкам разделять один объект, а кеш малых целых — повторно использовать заранее созданные объекты. is проверяет идентичность, поэтому равные значения не обязаны давать True.
CPython может переиспользовать строковые константы и целые объекты, но это не означает, что любые одинаковые строки или числа всегда совпадают по идентичности. Результат зависит от способа создания, компиляции и реализации интерпретатора. Даже если эксперимент с литералами даёт True, программную логику на этом строить нельзя. Для равенства значений используйте ==; is подходит для проверки конкретного объекта, например value is None.