天天看點

Python 變量回收

變量定義:

  eg: a = 1

     b = 1

  定義變量a時可以了解為 程式在記憶體位址中申請了一塊位址存儲數字1, 然後給這塊位址起了一個别名叫 "a"并将 1的引用計數+1, 在定義變量b時又給這塊位址起了别名叫"b"并将 1的引用計數+1。

  變量名與變量值是一種綁定關系,變量名本身并沒有儲存值的功能。變量自身是沒有位址的,變量的位址在Python中就是其指向的常量在記憶體中的位址。

局部變量,即定義在函數内部的變量。

  當函數被執行時,Python 會為其配置設定一塊臨時的記憶體空間,所有在函數内部定義的變量,都會存儲在這塊空間中。而在函數執行完畢後,這塊臨時存儲空間随即會被釋放并回收,該空間中存儲的變量自然也就無法再被使用。

  即函數調用完就釋放變量對記憶體位址的指向關系。

全局變量,即定義在函數外部的變量。

  隻要程式運作,就不會釋放,除非你用del 變量名,才會将引用計數 -1;如果全局變量被多處引用,del變量将會引發程式錯誤。

  程式結束時會釋放并回收引用計數為0的全局變量占用的記憶體位址空間。[程式退出以後由于循環引用、malloc申請的記憶體導緻GC沒清理幹淨的,會由作業系統統一回收, 確定資源不會洩漏。]

個人疑問:CPython 在程式運作結束時還工作不?是否還回收引用計數為0的變量?