掌握:
1.數(shù)字(0-255)、字符串(簡單的字符串)、布爾值的緩存
2.垃圾回收機制的引用計數(shù)機制
1.python中變量的賦值
python中所有的數(shù)據(jù)都是對象,所有的變量都是對象的引用
python對數(shù)字驹针、字符串和布爾對象進行緩存,讓不同的變量賦同樣的值诀艰,給的地址是緩存的對象的地址牌捷。
總結(jié):
1.給一個變量賦值的時候,賦的值是數(shù)字涡驮,字符串暗甥,布爾的時候,會先在緩存區(qū)中看是否有這個值捉捅,如果有撤防,就直接把這個值對應的地址賦給變量,沒有就開辟空間棒口,再返回地址寄月,而這些變量的地址是一樣的辜膝,先找一樣的值,沒有才會重新開辟空間漾肮,所以相同的值厂抖,地址會一樣)
2.如果不是以上的類型值,就直接開辟空間克懊,返回地址忱辅,一個變量存了一個對象的地址,那么這個變量就是這個對象的引用2.python中的內(nèi)存管理
C的內(nèi)存管理機制:手動
Java\OC\Python等:擁有一套自己的自動內(nèi)存管理機制
a.Python通過垃圾回收機制來對內(nèi)存進行管理的:不定時對程序中的對象進行檢測谭溉,看是否需要回收(將對應的內(nèi)存釋放)
看是否需要回收就看對象的引用計數(shù)是否為0墙懂,為0就回收
b.引用計數(shù):
Python中的每個對象在創(chuàng)建的時候就會有一個屬性叫引用計數(shù),其對應的值是0
當這個對象被引用一次扮念,其引用計數(shù)就會加1损搬;當對象的引用減少一個,其引用計數(shù)就會減13.垃圾回收機制
垃圾回收機制并不是一旦產(chǎn)生引用計數(shù)為0的對象就馬上回收柜与,而是不定時的對整個程序中所有的對象進行檢測巧勤,檢測的時候引用計數(shù)為0才回收
當前程序所有的對象引用計數(shù)變化的次數(shù)達到它的閥值的時候,才會對對象進行檢測4.循環(huán)引用 (Python中的垃圾回收機制弄匕,能夠自己解決因為循環(huán)引用而導致的內(nèi)存泄漏問題)
檢測的時候如果對象(object_i)的引用計數(shù)不是0颅悉,就備份引用計數(shù)值(count_i),去找到引用這個當前對象的對象(object_,j)
然后將object_j的引用計數(shù)count_j減1粘茄,如果count_j減1后的值為0,那么count_i的值就減1
如果減完后count_i的值也為0秕脓,那么object_i就會被銷毀
from sys import getrefcount
import gc
if __name__ == '__main__':
# 獲取垃圾回收臨界值
# print(gc.set_threshold())
object1 = [1,2]
# 函數(shù)本身會對查看的引用對象進行一次引用
print(getrefcount(object1))
num = ''
print(getrefcount(num))