嗨任何人都可以解释为什么我们有以下行为: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所有值的值具有相同第二个关键正在改变(例如dict1 [0.5] [0.5] = 4.5也会由于某些原因改变dict1 [1] [0.5])。
由于'dict.fromkeys(m,0)'运行一次,然后在'dict.fromkeys(k,dict.fromkeys(m,0))'的每个值中放入相同的字典。你可以通过在dict1中使用dct来检查:print id(dct)''它们都是相同的'id',例如。相同的'对象' – TemporalWolf
只创建了一个子字典。你现在拥有的词典本身可以通过多种方式访问。 'dict [0.5]'和'dict [1]'是指同一个字典(而不是它的拷贝) – sgrg