Развёрнутое пояснение:
1. В defaults создаётся словарь, где ключ retry ссылается на вложенный словарь со значением limit, равным 3.
2. Метод defaults.copy создаёт новый внешний словарь worker.
3. Вложенный словарь не копируется: значения defaults["retry"] и worker["retry"] ссылаются на один объект.
4. Присваивание через worker меняет limit в этом общем вложенном словаре на 5.
5. Поэтому обращение через defaults видит то же изменение, и print выводит 5.
Почему это важно
Это различие между поверхностным и глубоким копированием. Оно встречается при создании рабочих конфигураций из шаблона: изменение вложенного раздела поверхностной копии может незаметно изменить исходные настройки и повлиять на другие обработчики.
Post #4887
139
Python: задачки и вопросы
- ✍ 1