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

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