== vs is в Python: в чём разница на собесе
== и is выглядят похоже, но проверяют разные вещи. == сравнивает значения через метод __eq__, is — это один и тот же объект в памяти. На собесе любят спрашивать «почему a is b иногда True для маленьких int».
Если коротко. == — равенство значений, is — идентичность объекта (тот же адрес). Для None всегда используйте is.
Проверь себя · 1/3разбор после ответа
Есть список email
emails = ["a@x.com", "b@y.com", "c@x.com"]. Нужно получить множество доменов (часть после @). Какой вариант корректен?== vs is: таблица различий
Когда использовать ==
- Сравниваете значения (числа, строки, коллекции).
- Нужна семантика равенства, определённая классом.
- Сравниваете элементы при поиске/фильтрации.
Когда использовать is
- Проверяете на None:
x is None. - Нужно убедиться, что это тот же самый объект (а не копия).
- Сравниваете singleton (True/False/None).
На примере
== — значения
[1, 2] == [1, 2] # True (одинаковые значения)
'abc' == 'abc' # True
None == None # True (но пишут 'x is None')is — объекты
[1, 2] is [1, 2] # False (разные объекты)
a = b = [1]; a is b # True (одна и та же ссылка)
x is None # идиоматичная проверкаЛовушка на собесе
Известный «подвох»:
256 is 256 → True, но 257 is 257 → False (зависит от CPython, который кеширует маленькие int от -5 до 256). Никогда не сравнивайте числа через is.