is和 的區別 編碼補充

2022-07-17 11:12:13 字數 1648 閱讀 2087

1、id() - 我們通過id()可以檢視乙個變數表示的值在記憶體中的位址

is 比較的是記憶體位址  ==比較的是值

s = '

abc_

's2 = '

abc_

'print(id(s),id(s2)) #

4327204768 4327204768

print(s is s2) #

true

print(s == s2) #

true

對於int和str中的部分,兩個變數如果值相同,指向也是相同的,原理如下:

小資料池(常量池):把我們使用過的值儲存在小資料池中,供其他的變數使用

小資料池給數字和字串使用,其他型別不存在。

對於數字:

-5~256是會被加到小資料池中的,每次使用的都是同乙個物件。

對於字串:

1、如果是純文字資訊和下劃線,那麼這個物件會被新增到小資料池

2、如果是帶有特殊字元的,那麼不會被新增到小資料池,每次都是新的

3、如果是單一字母*n的情況,在20個單位內是可以的,超過20個單位就不會新增到小資料池中。

注意(一般情況下):

在py檔案中,如果你只是單純的定義乙個字串,那麼一般情況下都是會被追加到小資料池中的。

我們可以這樣認為,在使用字串的時候,python會幫我們把字串進行快取,在下次使用的時候直接指向這個字串即可,可以節省很多記憶體。

python3中:記憶體中使用的是unicode

1、ascii:最早的編碼,裡面有英文大寫字母、小寫字母、數字、一些特殊字元,沒有中文 8bit 1byte

2、gbk:中文國標碼,裡面包含了ascii編碼和中文常用編碼。 16bit  2byte

3、unicode:萬國碼,裡面包含了全世界所有國家文字的編碼 32bit  4byte

4、utf-8:長度可以變的萬國碼,是unicode的一種實現,最小字元佔8位

1、英文:8bit  1byte

2、歐洲文字:16bit  2byte

3、中文:24bit 3byte

在python3的記憶體中,在程式執行階段,使用的是unicode編碼,因為unicode是萬國碼,什麼內容都可以進行顯示,那麼在資料傳輸和儲存的時候由於unicode比較浪費空間和資源,需要把unicode轉存成utf-8或者gbk進行儲存。

在python中可以把文字資訊進行編碼,編碼之後的內容就可以進行傳輸了,編碼之後的資料是byte型別的資料,還是原來的資料,只是通過編碼之後表現形式發生了改變而已。

s = '新'

print(s.encode('gbk')) # b'\xd0\xc2'

print(s.encode('utf-8')) # b'\xe6\x96\xb0'

s1='a'

print(s1.encode('gbk')) # b'a'

print(s1.encode("utf-8"))# b'a'

英文編碼之後的結果和源字串一致。

中文編碼之後的結果根據編碼的不同,編碼結果也不同。

乙個中文的uft-8編碼是3個位元組,乙個gbk的中文編碼是2個位元組。

補充 字元編碼

unicode中文和英文都是佔兩個位元組 ascii只能存英文本母和特殊字元,佔乙個位元組 所以,用unicode存英文本元就會比ascii多一倍的儲存,因此就出現了乙個unicode擴充套件集utf 8,所有的英文本元 按ascii儲存,佔乙個位元組,而中文變成3個位元組 例子 將utf 8的編碼...

補充 adr和ldr的區別

ldr指令和adr ldr偽指令的區別 ldr指令屬於load store指令,用於讀取標號位址中的值 adr ldr偽指令用於獲取標號的位址。adr和ldr偽指令的區別 adr是獲取相對pc的位址,與程式當前執行的位置相關,是小範圍的位址讀取偽指令 ldr是獲取絕對位址,絕對位址是在link的時候...

資料編碼補充

恢復內容開始 1.用id求記憶體位址 id 查詢記憶體位址 name alex print id name li 1,2,3 print id li 結果 2.is判斷記憶體位址是否相同 name1 alex name2 alex print name1 name2 print name1 is n...