在对foo和foo_foo进行处理时,您不会更改引用:
foo = {}foo['key'] = 'stuff'foo仍然引用与以前相同的对象;现在它包含更多数据。
bar = ['key', 'value']
这种 重新分配
bar是指一个新的对象(名单有两个元素)。
但是,当在函数内部遇到该行时,除非您说,否则它将创建 本地 引用。实际上,您有两个不同的变量,分别是:全局变量和局部变量。
bar``globalbar``bar
Saying
global bar告诉Python使用全局版本,
bar而不是创建具有相同名称的新局部变量。
通常,如果要修改全局变量,则应
global varname为每个变量声明状态,以避免意外创建局部变量。
或者,您可以使用一个类:
class State(object): def __init__(self): self.foo = {} self.foo_foo = {} self.bar = Nonestate = State()def fn(): state.bar = ['key', 'value']


