Python學習--編碼和變數的記憶體問題
阿新 • • 發佈:2018-12-22
編碼問題
一.Python2
預設為ascii碼,使用時需要使用
# -*- encoding:utf-8 -*-
二.Python3
預設為utf-8
編碼方式 | 解釋 |
---|---|
unicode | 一個位元組表示所有英文、特殊字元、數字等,用四個位元組表示中文(過於浪費資源) |
utf-8 | unicode升級版,用三個位元組表示一箇中文字 |
gbk | 中國國內使用,一箇中文字兩個位元組 |
tips:不同編碼方式之間不能解析彼此的二進位制碼
- 字串編碼
記憶體中str型預設使用unicode,不能用於儲存和傳輸使用(佔用過多空間,僅在轉碼時借用),需要轉碼成bytes型別(使用utf-8等格式編碼),可用於傳輸和儲存。
1.英文表示
s = 'alex'
print(s, type(s))
s1 = b'alex'
print(s1, type(s1))
alex <class 'str'> # unicode編碼
b'alex' <class 'bytes'> # utf-8...編碼
2.中文表示
s = '程式設計師'
print(s, type(s))
s1 = '程式設計師'.encode('utf-8') # 預設為utf-8
print(s1, type(s1))
程式設計師 <class 'str'> # unicode編碼
b'\xe7\xa8\x8b\xe5\xba\x8f\xe5\x91\x98' <class 'bytes'> # 16進製表示,一箇中文字3個位元組
tips: python3中用encode,通過型別轉換來進行編碼轉換
記憶體問題
int型和str型的變數在一定範圍內會儲存在同一個小資料池中,以此來減少記憶體消耗。
id():返回記憶體地址,等同於c++的指標
s1 = 2
s2 = 257
print(id(s1), id(s2))
1905683232 2468906249936