is和==的區別以及編碼和解碼

一.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下的明文  移花接木你肌瘤
相關文章
相關標籤/搜索