В интерпретаторе Python я пробовал следующее:
>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>
Здесь, после добавления словаря «b» к списку «a», я меняю значение, соответствующее ключу 1 в словаре «a». Каким-то образом это изменение отражается и в списке. Когда я добавляю словарь в список, разве я не просто добавляю значение словаря? Похоже, я добавил указатель на словарь к списку, и, следовательно, изменения словаря также отражаются в списке.
Я не хочу, чтобы изменение отражалось в списке. Как это сделать?
Спасибо за уделенное время!
python
list
dictionary
neo29
источник
источник
Ответы:
Вы правы в том, что в вашем списке есть ссылка на исходный словарь.
a.append(b.copy())
должен сделать свое дело.Имейте в виду, что это делает мелкую копию. Альтернативой является использование
copy.deepcopy(b)
, которое создает глубокую копию.источник
Также с dict
a = [] b = {1:'one'} a.append(dict(b)) print a b[1]='iuqsdgf' print a
результат
[{1: 'one'}] [{1: 'one'}]
источник
использовать копию и глубокую копию
источник