Развёрнутое пояснение:
1. Создаётся словарь base с ключом retry, значением которого является другой словарь {limit: 3}.
2. copy.copy(base) создаёт новый внешний словарь cfg, но значение по ключу retry — это тот же вложенный словарь, а не его отдельная копия.
3. Через cfg['retry']['limit'] = 5 изменяется значение во вложенном словаре, на который ссылаются и base, и cfg.
4. Поэтому base['retry']['limit'] теперь равно 5, и print выводит 5.
Почему это важно: в реальных проектах часто клонируют конфиг, кэш или настройки. Если использовать поверхностное копирование, вложенные изменяемые структуры остаются общими, и правки в одной копии неожиданно затрагивают другую. Для полной изоляции вложенных объектов нужен copy.deepcopy.
Post #4827
309
Python: задачки и вопросы
- ✍ 3