Я пытался сохранить шаблон словаря в начале моего кода, что большинство функций будет использовать:Вложенные словари copy() или deepcopy()?
- Словаря: ключи = имя клиента, значение = Dictionary2
- Dictionary2: ключи = имя пользователя, значение = Нет
Я заполнил его всеми нашими клиентами и их пользователями. Затем каждая часть кода может копировать этот словарь и выводить его собственные. Цель состоит в том, что каждый вывод будет иметь ту же «базовую» структуру словаря, как шаблон, в котором None может быть изменен.
Для каждого процесса с помощью этого dictionnary я использую следующее:
process1dict = clientdict
# processing 1
output1dict = ... #modified version of original clientdict, the None values have been replaced by dictionaries/lists
process2dict = clientdict
# processing 2
output2dict = ... #same here but could be different
Проблема, что у меня есть, что cliendict изменяется каждый раз, когда он копируется в процессе! Я заметил, что из-за значения None
в моем начальном cliendict
он изменяется после каждого процесса (в зависимости от результата каждого из них).
Редактировать: Я нашел копию библиотеки, но copy()
, похоже, не помогает моему делу. Я попробую deepcopy(), но почему copy()
не сработал? И почему deepcopy()
будет?
Да, вам нужно сделать deepcopy -> без него 'clientdictDNT' просто указывает на один и тот же базовый словарь, поэтому он будет изменен при изменении' clientdict', вы также можете «dict (clientdict)» или «clientdict» .copy() ' – TemporalWolf
Вы должны прочитать эту статью: [Факты и мифы о именах и значениях Python] (http://nedbatchelder.com/text/names.html) от SO veteran, Нед Батчелдер. –
Если вы не используете deepcopy(), ваши члены ваших новых словарей будут указывать на словари, встроенные в ваш базовый словарь. Функция deepcopy() делает копии содержимого внутри скопированного словаря. –