1.小數據池
2.id
3.decode和encode
?
小數據池
#小數據池:不要死磕就行
#python為了簡化,搞出來的一個東西
ID
(1)
# id()函數可以幫我們查看一個變量的內存地址
# a=10
# b=30
# c=10
# print(id(a)) #1712876864
# print(id(b)) #1712877504
# print(id(c)) #1712876864
(2)
# lst=['周杰倫','麻花藤']
# print(id(lst)) #1248606696968
# lst.append('胡辣湯')
# print(id(lst)) #1248606696968
#你哥還是你哥,你的包還是你的包
#在這個過程中,始終還是那個那個包
(3)
# lst=['周杰倫','麻花藤']
# print(id(lst)) #2415882876424
# lst=[] #重新定義一個列表
# lst.append('胡辣湯')
# print(id(lst)) #2415882876296
#
(4)#兩個對象的內存地址是不一樣的
'''
lst1=[1,2,3]
lst2=[1,2,3]
print(id(lst1)) #1845106652680
print(id(lst2)) #1845106652552
'''
(5)#python&java等等最慢的事情是:創建對象 作用:顯著提高程序的運行效率
#隨著時間的提升,內存會不斷被消耗
'''
s1='abc' #內存中是沒有'abc,創建一個新的 0.001
s2='abc' #內存中已經有了'abc',直接把abc拿來用 0.00000001
print(id(s1),id(s2)) #1351674474712 1351674474712
'''
#程序中出現最高的數據類型:字符串,為了能夠快速的創建字符串
#節省內存,把相同的規律的字符串進行緩存,當下次創建的時候就不再創建了
#把字符串的緩存 ->小數據池->String iterning ->常量池->字符串緩存
#其他語言:常量池,字符串緩存
#在創建字符串之前,先去小數據池對比,是否已經存在了該字符串,如果存在了.
#就不創建新的了,直接拿原來存在的數據,省略掉反復重復創建字符串的過程,節省內存
(6)#小數據池只針對:數字,字符串,布爾值
# 什么數據會被緩存?
#數字,字符串,布爾值=》 都是不可變的數據類型(因為他會被很多人使用)
#有緩存和駐留機制
#基本數據類型:int bool str list tuple dic set
1.#數字
'''
a=1000
b=1000
print(id(a),id(b)) #2811993566928 2811993566928
'''
#在CMD顯示不一樣 -5-256
#在pycharm是顯示一樣的
2.#字符串,如果單純的寫字符串,幾乎都會被緩存
'''
s1='alex昨天上廁所沒關門,韓紅沖進去了,風扇個出來了,alex昨天上廁所沒關門,韓紅沖進去了,風扇個出來了'
s2='alex昨天上廁所沒關門,韓紅沖進去了,風扇個出來了,alex昨天上廁所沒關門,韓紅沖進去了,風扇個出來了'
print(id(s1),id(s2)) #2793562660912 2793562660912
'''
'''
如果在py文件中寫的字符串,幾乎都是緩存的
在黑窗口里寫的幾乎都不會緩存
#不同的解釋器,緩存的機制也不一樣
# 優點:可以幫助我們快速的創建對象,節省內存
# 缺點:緩存如果過大,響應速度會比較慢
#但是我們 "不要糾結"
'''
# ==和 is
'''
硬盤: 80MB/S(數據庫)
內存: 緩沖的作用 2G/S
CPU: 3Ghz (應用)
#內存很滿很滿時,會直接找硬盤,也就是硬盤中的內存機制
#百萬并發:90萬人在等待
#中間機制:中間加上緩存,現在的就是緩存
#短期內不改的,就放在小數據池內,京東的頁面
#每天緩存一份,但是價格不緩存
'''
(7)#==(判斷內容)和 is(判斷內存地址) 的區別
#== 比較的是數據,外貌
#is 比較的是內存地址,比較身份證號
'''
lst1=[1,2,3]
lst2=[1,2,3]
#列表沒有小數據池
print(id(lst1),id(lst2)) #2231123785096 2231123785224#并且每次的運行結果都不一樣
print(lst1==lst2) #True
print(lst1 is lst2) #False
s1='我叫周潤發'
s2='我叫周潤發'
print(s1==s2) #True
#print(s1 is s2) #True #小數據池
tu1=('周一','周二')
tu2=('周一','周二')
print(tu1 is tu2) #False 內存地址不相同
print(tu1 == tu2) #True 內容一樣
'''
3.decode和encode
(1)
'''
s='我今天非常的困'
bs=s.encode('utf-8') #把字符串轉化成utf-8格式bytes
print(bs)
#bytes不是給人看的,給機器用的
#21個字節
# b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
bs=s.encode('gbk') #把字符串轉化成utf-8格式bytes
print(bs)
#b'\xce\xd2\xbd\xf1\xcc\xec\xb7\xc7\xb3\xa3\xb5\xc4\xc0\xa7'
#utf-8和gbk是不能直接轉換的,必須使用unicode來轉換
'''
(2)
'''
bs=b'\xce\xd2\xbd\xf1\xcc\xec\xb7\xc7\xb3\xa3\xb5\xc4\xc0\xa7'
s=bs.decode('gbk')
print(s)
sb = b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
s=sb.decode('utf-8')
print(s)
#爬蟲中,在網站上,有的用的是GBK,有的就是utf-8
'''
#練習
'''
sb = b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
gb=sb.decode('utf-8') #解碼
gbk_1=gb.encode('gbk') #編碼
print(gbk_1)
'''
# 關于bytes,非ascii中的內容,展示的是\x..,如果是ascii中的內容,原樣輸出
# name='alex昨天吃多了'
# bs=name.encode('gbk')
# print(bs)
name='alex昨天吃多了'
bs=name.encode('GBK')
print(bs)