Развёрнутое пояснение:
1. В классе OrderBatch определён атрибут items, который ссылается на пустой список. Это атрибут класса, а не экземпляра.
2. Создание a и b не создаёт новых списков, оба экземпляра через поиск атрибутов находят один общий список класса.
3. a.items.append(1) изменяет этот общий список, добавляя в него 1.
4. print(b.items) обращается к тому же атрибуту класса и выводит [1].
Почему это важно: class attributes часто используются как значения по умолчанию, а пустые изменяемые коллекции в них — классическая ошибка, приводящая к общему состоянию между экземплярами. Это проявляется в тестах, бэкенд-сервисах и кэшах, где экземпляры начинают неожиданно влиять друг на друга.
Post #4805
323
Python: задачки и вопросы
- ✍ 1