20
cache = {}
def func():
    cache['foo'] = 'bar'
print cache['foo'] 

输出

bar

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

4

1 回答 1

21

因为您没有分配cache,所以您正在更改字典本身。cache仍然指向字典,因此本身没有改变。该行cache['foo'] = 'bar'转换为cache.__setitem__('foo', 'bar')。换句话说, 的值cache是一个 python dict,并且该值本身是可变的。

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

也许我对类似问题的这个较早的答案可以帮助您理解差异:Python list doesn't reflect variable change

于 2012-12-29T11:46:17.317 回答