こんにちは、誰もが説明できる:私は同じ第二のキーですべての値dict1の値を変更しようとするたびに最初のケースでそうPythonの辞書、我々は次の動作持っている理由missmatch
>>> k = [0.5, 1, 2]
>>> m = [0.5, 1, 2]
>>> dict1 = dict.fromkeys(k, dict.fromkeys(m, 0))
>>> dict1
{0.5: {0.5: 0, 1: 0, 2: 0}, 1: {0.5: 0, 1: 0, 2: 0}, 2: {0.5: 0, 1: 0, 2: 0}}
>>> dict1[0.5][0.5]= 4.5
>>> dict1
{0.5: {0.5: 4.5, 1: 0, 2: 0}, 1: {0.5: 4.5, 1: 0, 2: 0}, 2: {0.5: 4.5, 1: 0, 2: 0}}
>>> dict2 = {0.5: {0.5: 0, 1: 0, 2: 0}, 1: {0.5: 0, 1: 0, 2: 0}, 2: {0.5: 0, 1: 0, 2: 0}}
>>> dict2[0.5][0.5] = 4.5
>>> dict2
{0.5: {0.5: 4.5, 1: 0, 2: 0}, 1: {0.5: 0, 1: 0, 2: 0}, 2: {0.5: 0, 1: 0, 2: 0}}
をdict1 [0.5] [0.5] = 4.5も何らかの理由でdict1 [1] [0.5]を変更します)。関数が呼び出され
dict.fromkeys(m, 0)
ための実行一度とき、その後、dict.fromkeys(k, dict.fromkeys(m, 0))
のためにすべての値に同じ辞書を置く:
'dict.fromkeys(m、0)'は一度実行され、 'dict.fromkeys(k、dict.fromkeys(m、0))'のすべての値に同じ辞書を置くためです。これを確認するには 'for dct1 for dict:print id(dct)'を実行します。これらはすべて同じ 'id'になります。同じ「オブジェクト」 – TemporalWolf
サブ辞書は1つしか作成されていません。今あなたが持っているのは、辞書そのものが複数の方法でアクセスできることです。 'dict [0.5]'と 'dict [1]'は同じ辞書を参照しています(コピーしません) – sgrg