Развёрнутое пояснение:
1. Создаётся список services = ['api', 'auth', 'db'].
2. Вызов dict.fromkeys(services, []) создаёт словарь, где каждому ключу присвоена ссылка на один и тот же пустой список, а не три независимых списка.
3. Выражение statuses['api'] возвращает этот общий список, а append('ok') изменяет его, добавляя строку 'ok'.
4. Поскольку все три ключа ссылаются на один изменённый объект, print выводит {'api': ['ok'], 'auth': ['ok'], 'db': ['ok']}.
Почему это важно: это классическая ловушка при инициализации словарей с изменяемыми значениями по умолчанию в конфигах, группировках или агрегации статусов. Вместо dict.fromkeys(..., []) используйте dict comprehension или defaultdict(list), чтобы каждый ключ получил свой независимый объект и неожиданные мутации не распространялись на соседние записи.
Post #4870
263
Python: задачки и вопросы
- ✍ 2