is和==的区别以及编码和解码
一.is和==的区别
python中对象包含的三个基本要素分别是:id(身份标识),type(数据类型),value(值)
is和==都是对对象进行比较判断的,但对对象比较判断的内容不同.
★==是python标准操作符中的比较操作符,用来判断两个对象的value是否相等.
如:
1 a=6/2
2 b=3
3 print(a==b) #True
★is也被叫做同一性运算符,这个运算符比较判断的是对象的身份标识(id)是否相同,
如:
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.
同时在int和str类型的时候也有一些限制
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下的明文 移花接木你肌瘤
改变世界,改变自己!