Значения s1, s2 и s3 одинаковы. Совпадение самих объектов не гарантируется языком: компилятор может свернуть конкатенацию литералов и переиспользовать строковую константу.
Как объединение строк влияет на ссылки на объекты в Python
Значения s1, s2 и s3 одинаковы. Совпадение самих объектов не гарантируется языком: компилятор может свернуть конкатенацию литералов и переиспользовать строковую константу.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Рассмотрите, что произойдёт, если собрать строку частично из литерала, а оставшуюся часть добавить при помощи оператора +. Будет ли получившаяся переменная указывать на тот же объект строки, что и другие переменные, содержащие одинаковый текст?
s1 = "Hello World"
s2 = "Hello World"
s3 = "Hello Wor" + "ld"
Ответ
Значения s1, s2 и s3 одинаковы. Совпадение самих объектов не гарантируется языком: компилятор может свернуть конкатенацию литералов и переиспользовать строковую константу.
В пределах одного скомпилированного блока CPython часто хранит все три выражения как одну константу. Однако это оптимизация, а не контракт идентичности строк.
print(s1 == s2 == s3) # True
Если части строки поступают во время исполнения, результат объединения может быть отдельным объектом. Проверяйте содержимое через ==. Оператор is отвечает на другой вопрос — являются ли две ссылки ссылками на один объект — и для сравнения текста не подходит.