在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ python閉包的內(nèi)存回收

python閉包的內(nèi)存回收

別處對閉包的一點說明

"外部函數(shù)發(fā)現(xiàn),自己的臨時變量會在將來的內(nèi)部函數(shù)中用到,自己在結(jié)束的時候,返回內(nèi)函數(shù)的同時,會把外函數(shù)的臨時變量送給內(nèi)函數(shù)綁定在一起。所以外函數(shù)已經(jīng)結(jié)束了,調(diào)用內(nèi)函數(shù)的時候仍然能夠使用外函數(shù)的臨時變量。"

問:外函數(shù)是怎么知道 那個臨時變量要綁到內(nèi)函數(shù)上?
例如下面的例子,f執(zhí)行后將a綁到了g上,并刪掉了c 而g并沒有執(zhí)行,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))
'''
--------------運行結(jié)果---------------
49
50
52
51
25
51
'''
回答
編輯回答
眼雜

在編譯的時候,變量就已經(jīng)和內(nèi)函數(shù)綁定了 另外25在程序中十分常用,引用數(shù)的變化可能不同于預(yù)想 (變量在編譯階段時計算"引用數(shù)"而不是執(zhí)行時計數(shù))

2018年9月16日 07:50