2014-11-05 65 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()而沒有!我怎樣才能使原始字典保持不變?

我去了蟒蛇導師,基本上,鍵在dic1但價值鏈接到在dic的。我怎樣才能讓它們具有獨立的價值?

回答

1

你可以做copy.deepcopy,這樣

import copy 
dic1 = copy.deepcopy(dic) 

通常,當你複製一個字典對象,爲每一個鍵值對,一個新的參考鍵時(詞典不允許一成不變對象作爲鍵)並且還創建了對值對象的新引用。新的參考也會引用相同的原始對象。更新一套實際上是變異的對象。所以,新的參考和原始對象將反映這些變化。

深度複製完成後,它實際上會創建值對象的新副本(不是新引用),即使它是可變對象。這個副本遞歸地完成。