核心點:在python里,一切都是對象,函數(shù)也是對象!
當(dāng)執(zhí)行完def定義之后,會在內(nèi)存里創(chuàng)建一個函數(shù)對象,并指向函數(shù)名所在的變量里。
例如,
def print_star(n):
print("*"*n)
print(id(print_star))
c = print_star
print(id(c))
#運行結(jié)果print(id(print_star))和print(id(c))是一樣的。
內(nèi)存分析圖如下:

內(nèi)存分析圖.png
當(dāng)函數(shù)定義完成后,會在堆內(nèi)存里創(chuàng)建一個函數(shù)對象,并將地址傳遞給棧內(nèi)存里的變量,print_star;

內(nèi)存分析圖.png
c = print_star,在棧內(nèi)存里,創(chuàng)建一個新的變量c,指向函數(shù)對象。
因此,調(diào)用函數(shù)c(),也會通過引用,找到堆內(nèi)存中的函數(shù)對象,并執(zhí)行。