在介绍is与==的区别前,我们先来了解一些新的知识:内存地址、小数据池。
1.内存地址(is 比较的就是内存地址)
获取内存地址的方法:id()
1 a = "str" 2 print(id(a)) #1526192138144
2.小数据池
数字小数据池的范围:-5~256
str中如果有特殊字符他们的内存地址就不一样
字符串中单个字符*20以内他么的地址就一样,单个*21以上内存地址就不一样
*在pycha中一个py文件中所有相同的字符串,一般都是一个内存地址
1 a = "a"*20 2 b = "a"*20 3 print(id(a),id(b)) #1994400322232 1994400322232
1 a = "a"*21 2 b = "a"*21 3 print(id(a),id(b)) #2199798013576 2199798076088
3.is 和 ==的区别
is 比较的是内存地址
==比较的是两边的值
1 a = "a"*21 2 b = "a"*21 3 print(id(a),id(b)) #1673345490568 1673345553008 4 print(a == b) #True 5 print(a is b) #False
4.编码和解码
encode(编码方式) --拿到明文编码后对应的字节
decode(编码方式) --将编码后的字节解码成对应的明文
*注意:用什么编码就要用什么解码(编码在前面有提到)
1 a = "你好啊" 2 print(a.encode("utf-8")) #b'xe4xbdxa0xe5xa5xbdxe5x95x8a'
这里输出的结果就是用“utf-8”编码后输出的二进制数
1 b = b'xe4xbdxa0xe5xa5xbdxe5x95x8a' 2 print(b.decode("utf-8")) #你好啊
如果解码方式与编码方式不同会报错,或者解析出来的东西并不是你一开始输入的
1 a = "你好" 2 print(a.encode("utf-8")) #b'xe4xbdxa0xe5xa5xbd' 3 b = b'xe4xbdxa0xe5xa5xbd' 4 print(b.decode("gbk")) #浣犲ソ
1 a = "你好" 2 print(a.encode("utf-8")) #b'xe4xbdxa0xe5xa5xbd' 3 b = b'xe4xbdxa0xe5xa5xbd' 4 print(b.decode("gbk")) #浣犲ソ