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


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列表不反映可变变化。

相关内容

  • 没有找到相关文章

最新更新