Python прощают многое. Но некоторые ошибки новички совершают с завидным постоянством. Я и сам наступал на эти грабли — разбираем, как обойти. Классика. Смотри: ```python def add_item(item, lst=[]): lst.append(item) return lst print(add_item(1)) # [1] print(add_item(2)) # [1, 2] — упс! ``` Список `lst` создаётся один раз при определении функции. Каждый вызов использует один и тот же список. Ожидаешь пустой список, а получаешь всё накопленное. Как правильно: ```python def add_item(item, lst=None): if lst is None: lst = [] lst.append(item) return lst ``` То же самое с `{}`, `set()` и любыми изменяемыми типами. Никогда не ставь их в аргументы по умолчанию. `==` проверяет равенство значений. `is` проверяет, что это один и тот же объект в памяти. ```python a = [1, 2, 3] b = [1, 2, 3] print(a == b) # True — значения совпадают print(a is b) # False — разные объекты ``` С числами работает хитро: маленькие числа Python кеширует, поэтому `a = 5; b = 5; a is b` может вернуть `True`. А с `256` — уж