is, ==, id 用法、程式碼塊和快取機制
阿新 • • 發佈:2020-07-30
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:滿足規則的字串