考虑以下示例:
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
返回了,该内存位置不能再在堆栈上。