一.is和==的區別python
python中對象包含的三個基本要素分別是:id(身份標識),type(數據類型),value(值)編碼
is和==都是對對象進行比較判斷的,但對對象比較判斷的內容不一樣.spa
★==是python標準操做符中的比較操做符,用來判斷兩個對象的value是否相等.code
如: 對象
1 a=6/2
2 b=3
3 print(a==b) #True
★is也被叫作同一性運算符,這個運算符比較判斷的是對象的身份標識(id)是否相同,blog
如:內存
1 x=[4,5,6] 2 y=[4,5,6] 3 print(x is y) #False 由於x和y的id不一樣
1 a=1 #a和b是int型 2 b=1 3 print(a is b) #True 4 print(id(a)) #1659989008 5 print(id(b)) #1659989008 6 7 a='qwert' #a和b是字符串型 8 b='qwert' 9 print(a is b) #True 10 print(id(a)) #1685772424112 11 print(id(b)) #1685772424112 12 13 a=(1,2,3,4) #a和b是元組類型 14 b=(1,2,3,4) 15 print(a is b) #False 16 print(id(a)) #2761455024344 17 print(id(b)) #2761455024312 18 19 a=[1,2,3,4] #a和b是列表類型 20 b=[1,2,3,4] 21 print(a is b) #False 22 print(id(a)) #2127026092936 23 print(id(b)) #2127026092948 24 25 a= {'a':1,'b':2} #a和b是字典類型 26 b={'a':1,'b':2} 27 print(a is b) #False 28 print(id(a)) #2398891769216 29 print(id(b)) #2398891769288
is只有int和str類型的狀況下,a is b纔是True,其餘類型時,a是False.utf-8
同時在int和str類型的時候也有一些限制unicode
int型小數據池的範圍是:-5~256字符串
字符串中若是有特殊字符,他們的內存地址就不同
字符串中單個字符*20之內,他們的內存地址是同樣的,*21以上,就不同
二.編碼和解碼
字符串在Python內部的表示是Unicode編碼,所以,在作編碼轉換時,一般須要以unicode做爲中間編碼,即先將其餘編碼的字符解碼(decode)成unicode,再從unicode編碼(encode)成另外一種編碼。
decode('碼') 字節 ==> 明文 把括號中的原碼轉換成unicode中明文
encode('碼') 明文 ==> 字節 把unicode中的明文轉換成括號中的原碼
1 a=("移花接木你肌瘤") #unicode下的明文 2 print(a.encode('gbk')) #把unicode下的明文轉換成了gbk下的原碼 b'\xd2\xc6\xbb\xa8\xbd\xd3\xc4\xbe\xc4\xe3\xbc\xa1\xc1\xf6' 3 a1=a.encode('gbk') 4 print(a1.decode('gbk')) #把gbk下的原碼轉換成了unicode下的明文 移花接木你肌瘤 5 a2=a1.decode('gbk') 6 print(a2.encode('utf-8')) #把unicode下的明文轉換成了utf-8下的原碼 b'\xe7\xa7\xbb\xe8\x8a\xb1\xe6\x8e\xa5\xe6\x9c\xa8\xe4\xbd\xa0\xe8\x82\x8c\xe7\x98\xa4' 7 a3=a2.encode('utf-8') 8 print(a3.decode('utf-8')) #把utf-8下的原碼轉換成了unicode下的明文 移花接木你肌瘤