cache = {}
def func():
cache['foo'] = 'bar'
print cache['foo']
输出
bar
为什么这样做以及为什么不需要使用global
关键字?
答案 0 :(得分:15)
因为您没有将分配给cache
,所以您正在更改词典本身。 cache
仍然指向字典,因此它本身没有变化。 cache['foo'] = 'bar'
行转换为cache.__setitem__('foo', 'bar')
。换句话说,cache
的值是python dict
,该值本身是可变的。
如果您尝试使用cache
更改cache = 'bar'
引用的内容,则会更改cache
指向的内容,然后您需要global
关键字。< / p>
也许我对类似问题的回答可以帮助您理解差异:Python list doesn't reflect variable change。