小資料池和編解碼
小資料池:
是一種快取機制,也被稱為駐留機制
小資料池只針對:整數,字串,布林值,其他資料型別不存在駐留機制
在python中對-5到256之間的整數會被駐留在記憶體中,將一定規則的字串快取,在使用的時候,記憶體中只會建立一個改資料的物件,儲存在小資料池中,當使用的時候直接從小資料池中獲取物件的記憶體引用,而不需要建立一個新的資料,這樣會節省更多記憶體.
優點:能夠提高一些字串,整數的處理速度,省略的建立物件的過程.
缺點:在'池'中建立或者插入新的內容會花費更多的時間.
對於數字:-5~256是會被加到小資料池中的,每次使用都是同一個物件.
對於字串:
1.如果字串的長度是0或者1,都會預設進行快取.
2.字串長度大於1,但是字串中只包含字母,數字,下劃線時才會快取
3.用乘法的到的字串①.乘數為1,僅包含字母,數字,下劃線時才會快取
包含其他字元,而長度<=1也會被駐存,②.乘數大於1,僅包含數字,字母,下劃線這個時候會被快取,但字串長度不能大於20
4.指定駐留,我們可以通過sys模組中的intern()函式來指定駐留的內容.
在執行同一個程式碼塊的初始化物件的命令時,會檢查其值是否已經存在,如果存在,會將其重用,換句話說:執行同一個程式碼塊時,遇到初始
化物件的命令時,它會將初始化的這個變數與值儲存在一個字典中,在遇到新的變數時,會先在字典中查詢記錄,如果有同樣的記錄那麼他會重複使用這個字典中的之前的值,所以在你給出的例子,檔案執行時(同一個程式碼塊)會把a,b兩個變數指向同一個物件.
如果是不同的程式碼塊,他就會看這倆個變數是否是滿足小資料池的要求,如果是滿足小資料池的要求則會指向同一個地址,所以:a,b的賦值語句分別被當作兩個程式碼塊執行,但是他們不滿足小資料池的要求所以會得到兩個不同的物件,因而is判斷返回False.
記住:英文編碼之後的結果和源字串一致,中文編碼之後的結果根據編碼的不同,編碼的結果也不同,一箇中文的utf-8編碼是3個位元組,一個GBK的中文編碼是2個位元組,編碼之後的型別就是bytes型別,在網路傳輸和儲存的時候我們python是儲存和儲存的bytes(位元組碼串)型別,那麼在對方接受的時候,也是接受的bytes型別的資料.我們可以使用decode()來進行解碼操作,把bytes型別的資料還原會我們熟悉的字串.
encode()是編碼
decode()是解碼,以什麼方式編碼,就得用什麼方式解碼,不然就會顯示亂碼!
== 比較的時內容
is 比較的時記憶體地址