考虑以下代码:
def foo():
print('------- entering foo() ---------')
def internal():
print('x in internal: {}'.format(x))
print('id(x) in internal: {}'.format(id(x)))
print()
x = 100
internal()
global f
f = internal
x = 111
internal()
print('------- exiting foo() ---------')
print()
foo()
f()
代码输出为:
------- entering foo() ---------
x in internal: 100
id(x) in internal: 4362053072
x in internal: 111
id(x) in internal: 4362053424
------- exiting foo() ---------
x in internal: 111
id(x) in internal: 4362053424
一旦完成执行,foo()
执行的堆栈框架应该被销毁吗?但是,根据上面代码的输出,在我看来,internal
引用的f
的闭包可以访问分配了{{1 }}。如果栈帧已被破坏,foo()
如何访问执行f
的栈帧?