python2字串在記憶體中如何存放
阿新 • • 發佈:2019-01-01
- str型別
存在磁碟上的格式與存在記憶體中格式一致,例如ascii編碼佔一個位元組,utf-8編碼中文3個位元組,英文1個位元組
gbk編碼中文2個位元組,英文1個位元組
注意python2是不會自動轉換成unicode格式
unicode型別
python2用來支援多語言,不同編碼型別的str轉換需要通過它
unicode表示字串屬於邏輯層面,位元組串(str)表示存放格式屬於物理層面,如ascii,utf-8,gbk屬於位元組串ascii在記憶體中位元組數(utf-8/gbk同樣1個位元組)
>>> sys.getsizeof("a") #pyton做了包裝,包含了其它資料內容
38
>>> sys.getsizeof("aa") - sys.getsizeof("a") # 將字元重複一個求差值
1
- unicode在記憶體中長度(python2中4個位元組)
>>> sys.getsizeof(u"aa") - sys.getsizeof(u"a") #python2中4個位元組、python3中2個位元組
4
>>> sys.getsizeof(u"你你") - sys.getsizeof(u"你")
4
- utf-8長度(3個位元組)
>>> a1,a2="a" .encode("utf-8"),"aa".encode("utf-8")
>>> sys.getsizeof(a2) - sys.getsizeof(a1) #英文一個位元組
1
>>> b1,b2="你".decode("utf-8").encode("utf-8"),"你你".decode("utf-8").encode("utf-8")
>>> sys.getsizeof(b2) - sys.getsizeof(b1) #中文三個位元組
3
同樣的方法可以知道gbk英文一個位元組,中文2個位元組