python闭包的内存回收

别处对闭包的一点说明

"外部函数发现,自己的临时变量会在将来的内部函数中用到,自己在结束的时候,返回内函数的同时,会把外函数的临时变量送给内函数绑定在一起。所以外函数已经结束了,调用内函数的时候仍然能够使用外函数的临时变量。"

问:外函数是怎么知道 那个临时变量要绑到内函数上?
例如下面的例子,f执行后将a绑到了g上,并删掉了c 而g并没有执行,f怎么知道g需要a的呢?

import sys

a = 2
c = 25
print(sys.getrefcount(25))
d = 25
print(sys.getrefcount(25))
def f():
    a = 25
    c = 25
    print(sys.getrefcount(25))
    def g():
        print(a)
    return g

l = f()
print(sys.getrefcount(25))
l()
print(sys.getrefcount(25))
'''
--------------运行结果---------------
49
50
52
51
25
51
'''
阅读 2.2k
1 个回答

在编译的时候,变量就已经和内函数绑定了 另外25在程序中十分常用,引用数的变化可能不同于预想 (变量在编译阶段时计算"引用数"而不是执行时计数)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题