2017-10-05 168 views
0

我有以下代碼,首先我生成了一個有三層的字典。然後我給a3 [0] [0] ['boy']分配一個元素,但是我分配了所有的鍵。如果有人知道這是爲什麼,請幫助我。非常感謝你。Python的字典分配問題---分配所有值不是我想要的

a1={} 
a2={} 
a3= {} 
for p_type in ['boy','girl']: 
    a1[p_type] = 0 
for m in range(2): 
    a2[m] = a1 
for p in range(2): 
    a3[p] = a2 
print(a3) 
a3[0][0]['boy']=100 
a3 

下面是結果

{0: {0: {'boy': 0, 'girl': 0}, 1: {'boy': 0, 'girl': 0}}, 1: {0: {'boy': 0, 'girl': 0}, 1: {'boy': 0, 'girl': 0}}} 

Out[12]: 
{0: {0: {'boy': 100, 'girl': 0}, 1: {'boy': 100, 'girl': 0}}, 
1: {0: {'boy': 100, 'girl': 0}, 1: {'boy': 100, 'girl': 0}}} 
+1

變量和字典元素保存對對象的引用。您使用多個引用,但它們指向相同的字典對象。閱讀關於'dict.copy()'的解決方案。 –

+0

我不確定你想要完成什麼,但是如果你想按照三維數組的順序做一些事情,那麼你應該使用元組作爲鍵。我猜你想要像'a3 [0,0,'boy'] = 100'這樣的東西。請注意,括號內不需要括號。逗號是逗號,而不是括號。 – saulspatz

+0

@Michael Butscher,是的,謝謝。 –

回答

1

變量和字典元素保持對對象的引用。您使用多個引用,但它們指向相同的字典對象。

dict.copy()創建一個真正的副本。