Сравнение строк в Python: is vs == на примере join
@python_quizРазберем этот квиз
Коротко: у вас две строки с одинаковым содержимым, но созданные по-разному. Код помогает понять разницу между сравнением по значению и сравнением по идентичности объекта.
Условие (код)

Запуск этого кода покажет, что логическое сравнение по значению и сравнение ссылок дают разные результаты. Разберём, почему так происходит.
Что делает код
- a — литерал строки, создаётся при компиляции/загрузке модуля.
- b — новая строка, создаётся в момент выполнения выражения join.
==сравнивает содержимое объектов (значение).isпроверяет, ссылаются ли переменные на один и тот же объект в памяти (идентичность).
Демонстрация и дополнительная информация
Чтобы наглядно увидеть идентификаторы объектов, можно вывести id:

Если дополнительно использовать intern, можно заставить обе переменные ссылаться на один объект:

Почему == возвращает True
== у строк реализован как посимвольное сравнение содержимого. Если все символы совпадают и длина равна, результат — True. В нашем примере оба объекта содержат последовательность символов 'p' и 'y', значит по значению они равны.
Почему is возвращает False
