Как работают операторы in, not in, is, is not?
in и not in — операторы принадлежности: проверяют, входит ли элемент в последовательность или коллекцию (x in s, x not in s). is и is not — операторы тождественности: проверяют, ссылаются ли две переменные на один и тот же объект в памяти (x is y, x is not y).
Операторы 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 вместо == для чисел и строк. Это может давать «случайно правильный» результат из‑за внутренних оптимизаций, но считается неправильной практикой.
На курсах TeoBrain мы отдельно отрабатываем это на задачах: когда вы пишете проверки входных данных, валидируете JSON или сравниваете объекты доменной модели, важно на автомате выбирать правильный оператор и уметь объяснить, почему выбран именно он.