Рассмотрим код, приведенный ниже:
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
, имеет доступ к кадру стека выполнения foo()
, которому назначено f
.Как f
может иметь доступ к кадру стека выполнения foo()
, если кадр стека уже уничтожен?