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的變量?

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章