== или is: в чём разница
Оба оператора сравнивают, но по-разному. Путаница между ними — классическая ошибка новичка.
== сравнивает значения
Оператор == проверяет, равны ли значения. Например, 2 == 2.0 — истина, потому что числа равны по значению. В большинстве случаев для сравнения вам нужен именно ==: чисел, строк, списков.
is сравнивает объекты
Оператор is проверяет, один и тот же ли это объект в памяти, а не просто равны ли значения. Два разных списка с одинаковым содержимым равны по ==, но не тождественны по is — это разные объекты.
Когда нужен is
is уместен в проверках на None: пишут x is None, а не x == None. Также is используют для True и False. Во всех остальных сравнениях по смыслу почти всегда правильный выбор — ==.
Почему возникает путаница
Иногда is «случайно» срабатывает для маленьких чисел и коротких строк из-за внутренней оптимизации Python — и новичок делает неверный вывод. Не полагайтесь на это. Правило простое: значения — ==, тождество и None — is.
Частые вопросы
Как проверить, что переменная пустая (None)? Пишите if x is None.
Можно ли сравнивать строки через ==? Да, для строк == сравнивает их содержимое — это правильно.
Начать игру бесплатно