В Python существуют два отдельных способа сравнения объектов: операторы идентичности и операторы равенства. Понимание различия между ними критически важно для написания корректного и безошибочного кода.
is и is not)Операторы идентичности проверяют, указывают ли две переменные на один и тот же объект в памяти — не просто на равные значения.
is возвращает True, если обе переменные ссылаются на один и тот же объектis not возвращает True, если они ссылаются на разные объектыa = [1, 2, 3]
b = a
print(a is b) # True — обе переменные указывают на один объект
== и !=)Операторы равенства проверяют, имеют ли две переменные одинаковое значение, независимо от того, являются ли они одним и тем же объектом в памяти.
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True — одинаковые значения
print(a is b) # False — разные объекты в памяти
| Оператор | Проверяет |
|---|---|
is | Один и тот же объект в памяти |
== | Одинаковое значение |
is при сравнении с синглтон-объектами вроде None, True или False== при сравнении значений переменных# Правильное использование
if result is None:
print("No result found")
# Неправильно — используй == для сравнения значений
if result == None: # Работает, но не рекомендуется
print("No result found")
Python кэширует маленькие целые числа и короткие строки, что может привести к неожиданному возврату True для is при сравнении значений. Никогда не полагайся на это поведение — всегда используй == для сравнения значений.
Оператор is проверяет, ссылаются ли две переменные на один и тот же объект в памяти, а == проверяет, имеют ли они равные значения независимо от их расположения в памяти.
Новый — ещё не проверен сообществом
Вы