Как объединение строк влияет на ссылки на объекты в Python

Значения s1, s2 и s3 одинаковы. Совпадение самих объектов не гарантируется языком: компилятор может свернуть конкатенацию литералов и переиспользовать строковую константу.

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

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

Значения s1, s2 и s3 одинаковы. Совпадение самих объектов не гарантируется языком: компилятор может свернуть конкатенацию литералов и переиспользовать строковую константу.

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

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

Условие

Рассмотрите, что произойдёт, если собрать строку частично из литерала, а оставшуюся часть добавить при помощи оператора +. Будет ли получившаяся переменная указывать на тот же объект строки, что и другие переменные, содержащие одинаковый текст?

s1 = "Hello World"
s2 = "Hello World"
s3 = "Hello Wor" + "ld"

Ответ

Значения s1, s2 и s3 одинаковы. Совпадение самих объектов не гарантируется языком: компилятор может свернуть конкатенацию литералов и переиспользовать строковую константу.

В пределах одного скомпилированного блока CPython часто хранит все три выражения как одну константу. Однако это оптимизация, а не контракт идентичности строк.

print(s1 == s2 == s3)  # True

Если части строки поступают во время исполнения, результат объединения может быть отдельным объектом. Проверяйте содержимое через ==. Оператор is отвечает на другой вопрос — являются ли две ссылки ссылками на один объект — и для сравнения текста не подходит.

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

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

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

Подробнее