考虑这个简单的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}
当我检查id
和d[key]
的内置value
函数的输出时,它们是相同的。
有人可以解释为什么value = 4
不起作用吗?
答案 0 :(得分:-1)
当您使用for key, value in d.items()
进行迭代时,key
和value
变量实际上是您的密钥和值的副本(不是那么简单,但对于此说明而言已足够)了。 ;重复迭代。
直接更改它们不会修改字典本身。运行以下代码:
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是相同的。修改后,它们现在引用不同的值。
您的第一个示例,通过使用密钥引用特定条目并修改它,以预期方式更改实际字典。