變量定義:
eg: a = 1
b = 1
定義變量a時可以理解爲 程序在內存地址中申請了一塊地址存儲數字1, 然後給這塊地址起了一個別名叫 "a"並將 1的引用計數+1, 在定義變量b時又給這塊地址起了別名叫"b"並將 1的引用計數+1。
變量名與變量值是一種綁定關係,變量名本身並沒有儲存值的功能。變量自身是沒有地址的,變量的地址在Python中就是其指向的常量在內存中的地址。
局部變量,即定義在函數內部的變量。
當函數被執行時,Python 會爲其分配一塊臨時的內存空間,所有在函數內部定義的變量,都會存儲在這塊空間中。而在函數執行完畢後,這塊臨時存儲空間隨即會被釋放並回收,該空間中存儲的變量自然也就無法再被使用。
即函數調用完就釋放變量對內存地址的指向關係。
全局變量,即定義在函數外部的變量。
只要程序運行,就不會釋放,除非你用del 變量名,纔會將引用計數 -1;如果全局變量被多處引用,del變量將會引發程序錯誤。
程序結束時會釋放並回收引用計數爲0的全局變量佔用的內存地址空間。[程序退出以後由於循環引用、malloc申請的內存導致GC沒清理乾淨的,會由操作系統統一回收, 確保資源不會泄漏。]
個人疑問:CPython 在程序運行結束時還工作不?是否還回收引用計數爲0的變量?