2013-02-10 154 views
1

在Python的不同副本組成的字典,有兩個字典,簡單地做創建另一個字典

dict2 = dict1 

不會造成dict2是dict1的不同副本。他們會指向相同的東西,所以修改dict2將對dict1執行相同的效果。

一個解決辦法是

dict2 = dict(dict1) 

所以如果我修改dict2,它不會影響dict1的價值觀。

在我的程序中,我正在製作一個字典,它是由以前的字典的多個副本組成的。我們稱之前的詞典temp2和當前的temp3。我不知道有多少張,我需要提前,所以我想這樣做的:

temp3 = {} 
for i in xrange(some_number): 
    temp3[i] = dict(temp2) 

但我的調試測試表明,如果我修改TEMP3 [0]的字典(再次,是temp2的副本),那麼這也將修改temp3 [1]的副本和temp3 [2]等,所以結果是由n個相同副本的字典組成的字典,其中n = some_number。有誰知道解決方法?謝謝。

編輯:作爲對評論的迴應,temp2是由值列表構成的詞典,所以{a:[list1],b:[list2]等}。

+1

不,你製作的複製品,所以我覺得你的分析是不正確。 * temp2中包含了什麼?字典中是否包含其他可變值(嵌套字典或列表等)? – 2013-02-10 21:15:21

+0

我第一次從另一個字典中製作temp2,所以它的形式是temp2 = dict(temp1)。 temp2確實由嵌套列表組成。 temp2 = {a:[list1],b:[list2]等。}。我應該補充說,原來的職位... – TakeS 2013-02-10 21:19:21

回答

3

嘗試copy.deepcopy方法:http://docs.python.org/2/library/copy.html

+0

是的,那工作。嘿,我覺得自己像一個白癡... – TakeS 2013-02-10 21:25:14

+0

我並不知道'deepcopy()'實際上是那麼深。在我對問題的再現中,我意外地設置了錯誤的列表項目,從而產生了錯誤的印象。刪除了我的答案。 – 2013-02-11 02:00:33