После d = 'ld' и c = 'Hello Wor' + d значения c и a равны, но идентичность объектов языком не гарантируется. В обычном CPython такая конкатенация во время исполнения обычно создаёт другой объект.
Проверка, будет ли полученная строка той же объектной ссылки при конкатенации через переменную
После d = 'ld' и c = 'Hello Wor' + d значения c и a равны, но идентичность объектов языком не гарантируется. В обычном CPython такая конкатенация во время исполнения обычно создаёт другой объект.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Задание: объявить переменную d, содержащую строку "ld", и применить её для построения строки c вместо прямого литерала "ld". После этого нужно выяснить, указывает ли полученный объект c на тот же объект, что и переменная a.
a = "Hello World"
b = "Hello World"
c = "Hello Wor" + "ld"
Ответ
После d = 'ld' и c = 'Hello Wor' + d значения c и a равны, но идентичность объектов языком не гарантируется. В обычном CPython такая конкатенация во время исполнения обычно создаёт другой объект.
Проверять значение нужно через ==:
a = 'Hello World'
d = 'ld'
c = 'Hello Wor' + d
print(c == a) # True
print(c is a) # implementation-dependent identity
Литеральное выражение 'Hello Wor' + 'ld' компилятор может свернуть заранее и переиспользовать константу. Это не основание использовать is для сравнения строк. Результат идентичности может зависеть от версии, контекста компиляции и реализации Python; корректность программы не должна на нём строиться.