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.