Сравнение строк через равенство и идентичность

2. Сравнение строк через равенство и идентичность

Условие задачи:
Даны две строковые переменные с одинаковым значением.
Нужно определить, какие из выражений вернут True, а какие False:

  • сравнение строк через ==
  • сравнение строк через is
  • сравнение результатов конкатенации через ==
  • сравнение результатов конкатенации через is
a = '2'
b = '2'

a == b
a is b

(a + b) == (b + a)
(a + b) is (b + a)
Спойлеры к решению
Подсказки
  • Оператор == сравнивает значения объектов.
  • Оператор is сравнивает, являются ли переменные ссылками на один и тот же объект в памяти.
  • Строки-литералы вроде '2' в CPython обычно интернируются, поэтому a is b может вернуть True.
  • Результаты выражений (a + b) и (b + a) создаются во время выполнения как новые строковые объекты.
  • Даже если значения строк одинаковые, это не значит, что это один и тот же объект.
Решение
a = '2'
b = '2'

print(a == b)              # True
print(a is b)              # True

print((a + b) == (b + a))  # True
print((a + b) is (b + a))  # False

Результат:

True
True
True
False

Объяснение:

a == b

Вернёт True, потому что строки имеют одинаковое значение: '2'.

a is b

В CPython обычно вернёт True, потому что короткие строковые литералы часто интернируются. То есть a и b могут ссылаться на один и тот же объект в памяти.

(a + b) == (b + a)

Вернёт True, потому что:

a + b  # '22'
b + a  # '22'

Значения строк одинаковые.

(a + b) is (b + a)

Вернёт False, потому что результаты конкатенации создаются как разные строковые объекты. Их значения равны, но сами объекты разные.

Важно: для сравнения строк по содержимому нужно использовать ==. Оператор is используют для проверки идентичности объектов, например x is None.