1. 程式人生 > 實用技巧 >is, ==, id 用法、程式碼塊和快取機制

is, ==, id 用法、程式碼塊和快取機制

id():

  • 獲取物件的記憶體地址:print(id(i))

== :

  • 比較兩邊的值是否相同

is :

  • 判斷記憶體地址是否相同
    • id相同,值一定相同
    • 值相同,id不一定相同

程式碼塊:

  • Python是由程式碼塊構造的。塊是一個Python程式的文字,它是作為一個單元執行的。
  • 一個模組、一個函式、一個類、一個檔案等都是一個程式碼塊。
  • 同一個檔案中的兩個函式,也分別是兩個不同的程式碼塊。
  • 在互動式中輸入的每個命令都是一個程式碼塊。

兩個機制:

  • 同一程式碼塊下的快取機制:
    • Python在執行同一個程式碼塊的初始化物件的命令時,會檢查其值是否已經存在, 如果存在,會將值重用。換句話說:執行同一個程式碼塊是,遇到初始化物件的命令時,會將初始化的變數和值儲存在一個字典中,在遇到新的變數時,會先在字典中查詢記錄,如果有同樣的記錄,那麼它會重複使用這個字典中的值。
  • 快取機制的優點:
    • 節省記憶體空間,增加效能。
# 例:
s1 = 'abc'
s2 = 'abc'
print(id(s1))
print(id(s2))
# 在例子中,檔案執行時(同一個程式碼塊)會把s1、s2兩個變數指向同一個變數
# 滿足快取機制則他們在記憶體中只存在一個,即:id相同

適用物件:

  • int :所有數字
  • bool :True和False在字典中會以1,0方式存在,並且複用
  • str :幾乎所有的字串都會符合快取機制

不同程式碼塊的快取機制:也稱小資料池

  • Python自動將-5 ~ 256的整數進行了快取,
    當你將這些整數複製給變數時,並不會重新建立物件。
  • Python會將一定規則的字串在字串駐留池中,建立一份
    當你將這些字串賦值給變數時,並不會重新建立值,而是使用在字串駐留池中建立好的物件。

適用物件:

​ int:-5 ~ 256 之內的整數
​ bool
​ str:滿足規則的字串