Подтвердить что ты не робот

Python: добавление словаря в список - я вижу указатель вроде поведения

Я попробовал следующее в интерпретаторе python:

>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>

Здесь, добавив словарь "b" в список "a", я меняю значение, соответствующее ключу 1 в словаре "a". Как-то это изменение отражается и в списке. Когда я добавляю словарь в список, я не просто добавляю значение словаря? Похоже, что я добавил указатель на словарь в список, и поэтому изменения в словаре также отражаются в списке.

Я не хочу, чтобы изменения отражались в списке. Как это сделать?

Спасибо за ваше время!

4b9b3361

Ответ 1

Вы правы в том, что ваш список содержит ссылку на исходный словарь.

a.append(b.copy()) должен сделать трюк.

Имейте в виду, что это делает мелкую копию. Альтернативой является использование copy.deepcopy(b), что делает глубокую копию.

Ответ 2

Также с dict

a = []
b = {1:'one'}

a.append(dict(b))
print a
b[1]='iuqsdgf'
print a

результат

[{1: 'one'}]
[{1: 'one'}]