关于python:为什么在这种情况下不需要全局关键字?

Why is the global keyword not required in this case?

1
2
3
4
cache = {}
def func():
    cache['foo'] = 'bar'
print cache['foo']

输出

1
bar

为什么这样做有效?为什么不需要使用global关键字?


因为您没有给cache赋值,所以您改为更改字典本身。cache仍然指向字典,因此它本身是不变的。行cache['foo'] = 'bar'翻译为cache.__setitem__('foo', 'bar')。换句话说,EDOCX1的值(0)是一个python dict,这个值本身是可变的。

如果您试图通过使用cache = 'bar'来更改cache所指的内容,那么您将更改cache所指的内容,然后需要global关键字。

也许我对类似问题的这个老答案可以帮助您理解区别:python列表并不反映变量的变化。