В чем разница в использовании между is и ==?

1. == — сравнение значений (equality)

  • Проверяет, равны ли значения объектов.

  • Вызывает метод __eq__ объекта.

  • Даже если объекты разные в памяти, но содержат одинаковые данные — == вернёт True.

a = [1, 2, 3]
b = [1, 2, 3]

print(a == b)  # True  (списки с одинаковым содержимым)

2. is — сравнение идентичности (identity)

  • Проверяет, являются ли два имени ссылками на один и тот же объект в памяти.

  • Сравнивает id(a) и id(b).

a = [1, 2, 3]
b = a

print(a is b)   # True  (ссылаются на один объект)
print(a == b)   # True  (и значения одинаковы)

3. Пример, когда == и is различаются

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

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

💡 В автотестах часто встречается:

# Хорошо
if result is None:
    ...

# Плохо (работает, но менее читаемо)
if result == None:  # noqa: E711
    ...

Last updated

Was this helpful?