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

时间:2012-12-29 11:44:30

标签: python global-variables

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

输出

bar

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

1 个答案:

答案 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