Ответ 1
Вы правы в том, что ваш список содержит ссылку на исходный словарь.
a.append(b.copy())
должен сделать трюк.
Имейте в виду, что это делает мелкую копию. Альтернативой является использование copy.deepcopy(b)
, что делает глубокую копию.
Я попробовал следующее в интерпретаторе python:
>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>
Здесь, добавив словарь "b" в список "a", я меняю значение, соответствующее ключу 1 в словаре "a". Как-то это изменение отражается и в списке. Когда я добавляю словарь в список, я не просто добавляю значение словаря? Похоже, что я добавил указатель на словарь в список, и поэтому изменения в словаре также отражаются в списке.
Я не хочу, чтобы изменения отражались в списке. Как это сделать?
Спасибо за ваше время!
Вы правы в том, что ваш список содержит ссылку на исходный словарь.
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'}]
используйте копию и глубокую копию