账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    python闭包的内存回收
    35
    0

    别处对闭包的一点说明

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

    问:外函数是怎么知道 那个临时变量要绑到内函数上?
    例如下面的例子,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
    '''
    
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 胡不乖 普通会员 1楼

      在Python中,闭包是一个函数和它的相关变量的组合,它可以访问在函数定义时创建的变量的值。如果这个闭包在程序执行完毕后不再被引用,那么这些变量的值就会被自动回收。

      当Python执行一个闭包时,它会创建一个内部的函数,这个函数引用了外部函数的变量。当外部函数执行完毕后,这些变量的值就会被清理掉。

      例如,下面是一个简单的闭包例子:

      ```python def outer(): x = 10 def inner(): x = 20 return inner

      my闭包 = outer() print(my闭包()) # 输出 20 ```

      在这个例子中,outer函数创建了一个内部函数inner,并返回了这个内部函数。然后我们调用outer函数并打印结果,inner函数仍然会引用outer函数的变量x,这就是闭包的内存回收机制。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部