python程式碼塊和小資料池
阿新 • • 發佈:2018-12-30
id和is
在介紹程式碼塊之前,先介紹兩個方法:id和is,來看一段程式碼
1 # name = "Rose" 2 # name1 = "Rose" 3 # print(id(name)) 4 # print(id(name1)) # 兩個id相同 5 # print(name == name1) # True 6 # print(name is name1) # True
執行結果
2257847297000
2257847297000
True
True
Process finished with exit code 0
再來看一段程式碼
1 l1 = [1, 2, 3]2 l2 = [1, 2, 3] 3 print(id(l1)) 4 print(id(l2)) # 兩個id不一樣 5 print(l1 == l2) # True 6 print(l1 is l2) # False
執行結果
1403309626952
1403309626888
True
False
Process finished with exit code 0
發現規律了嗎?id是獲取記憶體地址,is是判斷兩個資料的記憶體地址是否相同,這與==是不一樣的,==是判斷兩個資料的值是否相同。
程式碼塊
什麼是程式碼塊?
程式碼塊是python程式的一個單元,一個模組,一個函式,一個類,一個檔案都是一個程式碼塊;在cmd命令列裡,一條命令就是一個程式碼塊
程式碼塊有什麼用?
python在執行一個程式碼塊的初始化物件命令時,會將其名稱和值儲存在字典中,在之後遇到新的初始化物件命令時,就會檢查其值是否在字典裡,如果存在,會將其重用,也就是後一個物件與之前的物件指向同一個值,這既是程式碼塊的快取機制。看到這裡你可能就明白了程式碼塊快取機制的好處:就是節省記憶體;提高效率。因為如果沒有快取機制的話就要重新開闢記憶體,開闢記憶體不僅要消耗記憶體,還會耽誤時間。看到這裡有人就可能會問了:既然快取機制有這麼多好處,那為什麼不在全域性而只是在程式碼塊裡使用呢?
滿足快取機制則他們在記憶體中只有一個,也就是id相同。
程式碼塊快取機制的適用範圍:int(float),bool,str
int(float):任何數字在同一程式碼塊下都會複用。
bool:True和False在字典中會以1,0方式存在,並且複用。
str:幾乎所有的字串都會符合快取機制
小資料池
小資料池,也稱為小整數快取機制,或者稱為駐留機制等等
小資料池是針對不同程式碼塊之間的快取機制,其適用範圍也是int(float),bool,str
int: -5~256
bool: 都滿足
str: 滿足一定規則的會駐留
1 # l1 = [1, 2, 3] 2 # l2 = [1, 2, 3] 3 # print(id(l1)) 4 # print(id(l2)) # 兩個id不一樣 5 # print(l1 == l2) # True 6 # print(l1 is l2) # False
總結
如果在同一程式碼塊下,則採用同一程式碼塊下的換快取機制。
如果是不同程式碼塊,則採用小資料池的駐留機制。