cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
输出
bar
为什么这项工作以及为什么不需要使用global
关键字?
因为您不是分配 cache
,所以您正在更改字典本身。cache
仍指向字典,因此本身没有变化。线cache['foo'] = 'bar'
转换为cache.__setitem__('foo', 'bar')
。换句话说, cache
的值是python dict
,该值本身是可变的。
如果您试图通过使用cache = 'bar'
更改cache
所指的内容,则将更改cache
点,然后您需要global
关键字。
也许我对一个类似问题的较旧答案有助于您理解差异:Python列表不反映可变变化。