27. Сказать результат сравнения идентичности строк
Условие задачи Проверить, указывают ли две переменные со строковым значением “hello” на один и тот же объект в памяти с помощью оператора is.
a = "hello"
b = "hello"
a == b
a is b
Спойлеры к решению
Подсказки
- Оператор
==сравнивает значения объектов. - Оператор
isпроверяет, указывают ли переменные на один и тот же объект в памяти. - Строковые литералы вроде
"hello"в CPython обычно интернируются. - Поэтому две переменные с одинаковым строковым литералом могут ссылаться на один и тот же объект.
- Для сравнения строк по содержимому нужно использовать
==, а неis.
Решение
a = "hello"
b = "hello"
print(a == b)
print(a is b)
Результат в CPython обычно будет таким:
True
True
Разбор:
a == b
Вернёт:
True
Потому что значения строк одинаковые:
"hello" == "hello"
Дальше:
a is b
Тоже обычно вернёт:
True
Потому что строка "hello" является строковым литералом, и Python обычно интернирует такие строки. В результате a и b могут ссылаться на один и тот же объект в памяти.
Но важный момент: для строк нельзя полагаться на is при сравнении содержимого. Правильное сравнение строк — через ==.
Оператор is нужен для проверки идентичности объектов, например:
x is None