0
我有以下變量:Python字典值更新
list_m = ["a","b","c"]
list_s = ['x','y','z']
dict_m = dict.fromkeys(list_m[:])
dict_s = dict.fromkeys(list_s[:],copy.deepcopy(dict_m)) # empty dict of dicts
所以我
In[22]: dict_s
Out[22]:
{'x': {'a': None, 'b': None, 'c': None},
'y': {'a': None, 'b': None, 'c': None},
'z': {'a': None, 'b': None, 'c': None}}
在更新dict_s值這樣
dict_s['x']['a']= np.arange(10)
我得到
In[27]: dict_s
Out[27]:
{'x': {'a': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'b': None, 'c': None},
'y': {'a': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'b': None, 'c': None},
'z': {'a': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'b': None, 'c': None}}
什麼,而不是我想要的/預期:
In[27]: dict_s
Out[27]:
{'x': {'a': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'b': None, 'c': None},
'y': {'a': None, 'b': None, 'c': None},
'z': {'a': None, 'b': None, 'c': None}}
我完全不明白,如果這是一個深/淺拷貝的問題還是其他什麼東西。
請解釋爲什麼你想使用此代碼做。 – Soviut
我想要以後的結果而不是前者 – dayum
您的deepcopy只執行一次,然後將此副本分配給所有三個鍵。嘗試一個字典理解,而不是fromkeys –