在循环中更改字典值在Python中不起作用

时间:2017-11-22 14:42:53

标签: python dictionary

考虑这个简单的Python字典,我想将所有值更改为4:
d = {'a': 1, 'b': 2, 'c': 3}

我知道以下方法是预期的方式:

for key, value in d.items():
    d[key] = 4
print(d)  # output: {'a': 4, 'b': 4, 'c': 4}

然而,这不是:

for key, value in d.items():
    value = 4
print(d)  # output: {'a': 1, 'b': 2, 'c': 3}

当我检查idd[key]的内置value函数的输出时,它们是相同的。

有人可以解释为什么value = 4不起作用吗?

1 个答案:

答案 0 :(得分:-1)

当您使用for key, value in d.items()进行迭代时,keyvalue变量实际上是您的密钥和值的副本(不是那么简单,但对于此说明而言已足够)了。 ;重复迭代。

直接更改它们不会修改字典本身。运行以下代码:

d = {'a': 1, 'b': 2, 'c': 3}

for key, value in d.items():
    print id(value)
    print id(d[key])
    value = 4
    print id(value)
    print id(d[key])
    print(d)  # output: {'a': 1, 'b': 2, 'c': 3}

给出以下输出:

  

10158424
  10158424个
  10158352个
  10158424个
  {' a':1,' c':3,' b':2}   10158376个
  10158376个
  10158352个
  10158376个
  {' a':1,' c':3,' b':2}   10158400个
  10158400个
  10158352个
  10158400个
  {' a':1,' c':3,' b':2}

如您所见,在修改value之前,ID是相同的。修改后,它们现在引用不同的值。

您的第一个示例,通过使用密钥引用特定条目并修改它,以预期方式更改实际字典。