考虑以下示例:
def g():
in_g=100
def f1():
nonlocal in_g
in_g = 10
def f2():
nonlocal in_g
print(in_g)
return (f1,f2)
(f1, f2) = g()
f2() #prints 100
f1()
f2() #prints 10
内部函数f1和f2都在其“闭包”中访问变量in_g。但是,g返回后,在in_g内存中保存在哪里?
我假设在g执行时,in_g是堆栈帧上的一个变量,对应于对g. 因此,g和f1都f2在使用变量时访问相同的内存位置(在堆栈上)in_g。
但是,如示例中所见,在g返回之后f1,f2在引用in_g. 但是,现在g返回了,该内存位置不能再在堆栈上。