Операторы in и not in — проверка принадлежности
Операторы in и not in используются, чтобы узнать, содержится ли значение внутри другой сущности: списка, кортежа, строки, множества, словаря и т.п.
x in s возвращает True, если x является элементом s (или ключом для словаря).
x not in s возвращает True, если x не содержится в s.
Примеры:
numbers = [1, 2, 3]
3 in numbers # True
5 in numbers # False
5 not in numbers # True
text = "hello"
"h" in text # True
"x" not in text # True
data = {"id": 1, "name": "TeoBrain"}
"id" in data # True (проверяются ключи словаря)
"TeoBrain" in data # False
Важно: для словаря in проверяет именно ключи, а не значения. В реальном backend‑коде это постоянно используется при проверке наличия полей в данных запроса, конфиге или JSON‑объекте.
Операторы is и is not — проверка тождества
is и is not — это операторы тождественности (identity). Они отвечают на вопрос: «Эти две переменные указывают на один и тот же объект в памяти или нет?»
x is y — True, если x и y ссылаются на один и тот же объект.
x is not y — True, если это разные объекты.
Пример:
a = [1, 2, 3]
b = [1, 2, 3]
c = a
a == b # True (значения равны)
a is b # False (разные объекты)
a is c # True (это один и тот же объект)
a is not b # True
На практике is чаще всего используют для сравнения с None (рекомендация стиля):
value = None
if value is None:
...
Именно это ожидают услышать интервьюеры, когда спрашивают про разницу == и is.
Как не перепутать операторы на собеседовании
Краткое правило, которое уместно проговорить: для проверки принадлежности в коллекции — in/not in. Для проверки тождества (один и тот же объект) — is/is not. Для проверки равенства значений — ==, а не is. Типичная ошибка: использование is вместо == для чисел и строк — это может «случайно» сработать из‑за внутренних оптимизаций, но считается неправильной практикой.