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

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

* Проверяет, **равны ли значения** объектов.
* Вызывает метод `__eq__` объекта.
* Даже если объекты разные в памяти, но содержат одинаковые данные — `==` вернёт `True`.

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

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

***

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

* Проверяет, **являются ли два имени ссылками на один и тот же объект в памяти**.
* Сравнивает `id(a)` и `id(b)`.

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

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

***

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

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

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

***

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

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

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