Как устроен под капотом механизм интернирования строк (string interning) и кэширования малых целых чисел (small integer caching) в CPython? В каких случаях оператор is вернёт True для одинаковых значений, а в каких — False?

Интернирование позволяет строкам разделять один объект, а кеш малых целых — повторно использовать заранее созданные объекты. is проверяет идентичность, поэтому равные значения не обязаны давать True.

Короткий ответ

Что ответить на собеседовании

Интернирование позволяет строкам разделять один объект, а кеш малых целых — повторно использовать заранее созданные объекты. is проверяет идентичность, поэтому равные значения не обязаны давать True.

Подробный разбор

Ответ с пояснениями

Интернирование позволяет строкам разделять один объект, а кеш малых целых — повторно использовать заранее созданные объекты. is проверяет идентичность, поэтому равные значения не обязаны давать True.

CPython может переиспользовать строковые константы и целые объекты, но это не означает, что любые одинаковые строки или числа всегда совпадают по идентичности. Результат зависит от способа создания, компиляции и реализации интерпретатора. Даже если эксперимент с литералами даёт True, программную логику на этом строить нельзя. Для равенства значений используйте ==; is подходит для проверки конкретного объекта, например value is None.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее