2014-11-05 1 views
0

Я пытаюсь скопировать словарь, который имеет в качестве значений.Попытка скопировать словарь с наборами как значения не работают

dic = {0: set([1]), 1: set([0, 2]), 2: set([1, 3]), 3: set([2, 4]), 4: set([3])} 
dic1 = dic.copy() 
dic1[0].update(dic[1]) 
print dic 
print dic1 

и я получаю

{0: set([0, 1, 2]), 1: set([0, 2]), 2: set([1, 3]), 3: set([2, 4]), 4: set([3])} 
{0: set([0, 1, 2]), 1: set([0, 2]), 2: set([1, 3]), 3: set([2, 4]), 4: set([3])} 

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

Я пошел к преподавателю python и в основном, ключи находятся в dic1, но значения привязаны к значениям в dic. Как я могу сделать так, чтобы у них были независимые ценности?

ответ

1

Вы можете сделать copy.deepcopy, как этот

import copy 
dic1 = copy.deepcopy(dic) 

Обычно при копировании объект словаря, для каждого и каждой пары ключ-значение, новая ссылка на ключ сделан (словарь не позволяет неизменны объекты как ключи) и новая ссылка на объект значения. Новая ссылка будет также ссылаться на тот же оригинальный объект. Обновление набора фактически мутирует объект. Таким образом, новая ссылка и исходный объект будут отражать изменения.

Когда выполняется глубокая копия, на самом деле создается новая копия объекта значения (а не новая ссылка), хотя он является изменяемым объектом. Эта копия выполняется рекурсивно.

Смежные вопросы