第七天-數據池/常量池 編碼補充
- 2020 年 1 月 19 日
- 筆記
小數據池/常量池(坑,別糾結) :
小數據池 一種數據緩存機制.也被稱為駐留機制
用緩存的前提: 數據可以被共享。不可變數據類型
作用/意義:把數據存在小數據池 快速創建對象 共享 節省內存 解釋字符串賦值問題等
python中只針對:整數,字符串串,布爾值 注意共享的是不可改變的數據類型
id() is ==
1 # id() 查看一個變量表示的值的內存地址 2 a = 1000 3 b = 1000 4 c = "lijie" 5 print(id(a)) # 2602674608112 內存地址 6 print(id(b)) # 2602674608112 7 print(id(c)) # 2602703864248 8 9 # == 判斷左右兩邊的值是否一致 10 print(a == b) # 判斷左右兩邊的值 11 print(a == c) 12 13 # is 判斷左右兩邊的內容地址是否一致 14 print(a is b) # 判斷左右兩邊內容地址 15 print(b is c)
緩存
為什麼有緩存 數據保存安全 速度快 加大吞吐量 分佈式 異地部署(如 Google無盤數據中心)
單純的創建變量。都是有緩存的
1 # 單純的創建變量。都是有緩存的 2 a = 49876 3 b = 49876 4 print(a is b) # True 5 a = 49786*20 6 b = 49786*20 7 print(a is b) # True
注意 在命令行中(command模式) 小數據池 int取值範圍在[-5,256]
1 # 注意 在命令行中(command模式) 小數據池 int取值範圍在[-5,256] 2 a = 2000 3 b = 2000 4 print(a is b) # 在py文件裏面是True
但在命令行中:

原因: 在代碼塊內的緩存機制是不一樣的 故在py文件裏面是True 在command模式中是False
數據池不必糾結,了解會用就好,官方也沒詳細解釋。
編碼 轉碼:
python3中使用的是unicode,python2中使用的是ascii碼,但unicode 太長適合計算不適合存儲. utf-8適合存儲和傳輸.因此需要用用到編碼轉換.
編碼: .encode()
注意編碼和解碼時都需要制定編碼格式.
1 #.encode() 2 s = "嘿en哈" 3 s0 = "JJ" 4 bs = s.encode("utf-8") # 制定utf-8格式 5 bs0 = s0.encode("utf-8") 6 # 英文編碼之後結果和源字符串一致.中文編碼之後的結果根據編碼不同.編碼結果不同. 7 print(bs0) # b'JJ' 英文編碼後和原來一致 8 print(bs) # b'xe5x98xbfenxe5x93x88' 一個中文utf-8三位元組 9 bs0 = s0.encode("gbk") 10 bs = s.encode("gbk") 11 print(bs0) # b'JJ' 12 print(bs) # b'xbaxd9enxb9xfe' 一個中文gbk 兩位元組
解碼:.decode()
1 j = b'xbaxd9enxb9xfe' 2 j1 = j.decode("gbk") 3 print(j1)
編碼:存儲和傳輸時 encode()
解碼:接收數據時 decode()
b'xxxxx'這種格式的數據是bytes類型的數據 bytes是python中的最小數據單元
數據傳輸(包括文字/圖片/視頻)都是bytes(如直播)————流程:編碼——推流——解碼——用戶
1 # 練習 把一個utf-8編碼變成GBK編碼 2 bm = b'xe5x98xbfenxe5x93x88' 3 4 bm0 = bm.decode() # 先解碼成Unicode 5 bm1 = bm0.encode("gbk") # 再編碼成gbk 6 print(bm1)