1. 程式人生 > >python程式碼塊和小資料池

python程式碼塊和小資料池

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

總結

如果在同一程式碼塊下,則採用同一程式碼塊下的換快取機制。

  如果是不同程式碼塊,則採用小資料池的駐留機制。