SkillPy

is и == в Python: в чём разница

Время чтения8 мин чтения
Опубликовано14 сентября 2026 г.
Средне
Python
Синтаксис
Ошибки
Начинающим
is и == в Python: в чём разница

is и == в Python легко перепутать, но они отвечают на разные вопросы. == спрашивает «равны ли значения?», а is — «это один и тот же объект в памяти?». Два разных списка с одинаковым содержимым равны по ==, но не идентичны по is. Разберём, когда какой оператор нужен и почему is для чисел обманчив.

Коротко

== сравнивает значения — используй его почти всегда. is сравнивает идентичность объекта (тот ли это самый объект) — используй только для проверки на None: if x is None. Для сравнения чисел, строк и списков is применять нельзя — результат непредсказуем.

Разница на примере

x = [1, 2, 3]
y = [1, 2, 3]

print(x == y)   # равны ли значения?
print(x is y)   # один ли это объект?
True
False

x и y содержат одинаковые данные, поэтому x == y — True. Но это два разных списка, созданных отдельно: каждый занимает своё место в памяти. Поэтому x is y — False. Оператор == смотрит на содержимое, is — на «это физически тот же объект или нет».

Когда две переменные ссылаются на один объект, is вернёт True:

x = [1, 2, 3]
z = x           # та же ссылка, не копия

print(x == z)
print(x is z)
True
True

Здесь z = x не создаёт новый список, а даёт второе имя тому же объекту. Поэтому и значения равны, и объект один и тот же. Как устроены объекты, значения и типы — в гайде Типы данных в Python: полный гайд для начинающих.

Единственный частый случай для is — это None

None в программе существует в единственном экземпляре, поэтому проверку на него принято писать через is — это быстро и однозначно. Так же поступают с True и False, но на практике чаще всего встречается именно is None.

def find_user(user_id):
    return None

result = find_user(42)
if result is None:
    print("Пользователь не найден")
Пользователь не найден

Здесь is None — идиоматичная проверка «результата нет». А вот сравнивать значения (result == "admin", age == 18) всегда нужно через ==. Про сами операторы сравнения и условия — в гайде if, elif и else в Python: условия с примерами.

Короткие ответы на вопросы

В чём разница is и ==?

== сравнивает значения (равны ли данные), is — идентичность (один ли это объект в памяти). Два разных списка с одинаковым содержимым: == даст True, is — False.

Когда использовать is?

Практически только для None: if x is None. Для сравнения чисел, строк и других значений всегда используй ==.

Почему is иногда возвращает True для одинаковых чисел?

Из-за кэша маленьких целых чисел (−5…256): Python переиспользует для них один объект. Это деталь реализации, полагаться на неё нельзя — для чисел сравнивай через ==.

Кот-наставник

— Правило почти без исключений: значения сравнивай через ==, а is держи для одного случая — проверки на None.

— Увидишь if x is 5 — это почти наверняка баг. Иногда сработает из-за кэша чисел, но полагаться на это нельзя. Нужно значение — только ==.

Сравнения в Python — на практике

На SkillPy ты пишешь условия сам, а AI-наставник замечает, где вместо == закрался is, и объясняет, почему код сработал не так. Он понимает твоё решение, а не сверяет с шаблоном.