一、is和==的区别
is比较内存地址,id( )获取内存地址
==比较两边的值
s1 = "哈哈" s2 = "哈哈" print(s1 == s2) # True print(s1 is s2) # True 原因是有小数据池的存在 导致两个变量指向的是同一个对象 l1 = [1, 2, 3] l2 = [1, 2, 3] print(l1 == l2) # True, 值是一样的 print(l1 is l2) # False, 值是假的
小数据池:
1、给数字和字符串使用,其他数据类型数据不存在
数字小数据池的范围 -5 ~ 256 每次都使用同一个对象
2、如果是纯文字信息和下划线,那么这个对象会被添加到小数据池
字符串中不能包含特殊符号,如果有特殊字符他们的内存地址就不一样
字符串中单个*20以内他们的内存地址一样,单个*21以上内存地址不一致
二、编码和解码
encode(编码方式) ---- 拿到明文编码后对应的字节
字符串在传输时转化成bytes=> encode(字符集)来完成
s = "alex" print(s.encode("utf-8")) # 将字符串编码成UTF-8 print(s.encode("GBK")) # 将字符串编码成GBK 结果: b'alex' b'alex'
s = "中" print(s.encode("UTF-8")) # 中文编码成UTF-8 print(s.encode("GBK")) # 中文编码成GBK 结果: b'\xe4\xb8\xad' b'\xd6\xd0'
decode(编码方式) -----将编码后的字节解码成对应的明文
s = "我叫李嘉诚" print(s.encode("utf-8")) #b'\xe6\x88\x91\xe5\x8f\xab\xe6\x9d\x8e\xe5\x98\x89\xe8\xaf\x9a' print(b'\xe6\x88\x91\xe5\x8f\xab\xe6\x9d\x8e\xe5\x98\x89\xe8\xaf\x9a'.decode("utf-8")) # 解码
注意: 用什么进行编码就要什么进行解码 不然后会懵逼!
s = "我是文字" bs = s.encode("GBK") # 我们这样可以获取到GBK的文字 # 把GBK转换成UTF-8 # 首先要把GBK转换成unicode. 也就是需要解码 s = bs.decode("GBK") # 解码 # 然后需要进⾏重新编码成UTF-8 bss = s.encode("UTF-8") # 重新编码 print(bss)
ASCII 码
不支持 中文
支持 英文 数字 符号
8位 一个字节
gbk码 国标:
支持 中文,英文,数字,符号
英文 16位 二个字节
中文 16位 二个字节
unicode 万国码
支持 中文,英文,数字,符号
英文 32 位 四个字节
中文 32位 四个字节
utf-8 长度可变的万国码 最少用8位
英文 8位 一个字节
中文 24位 三个字节
Python3中 程序运行阶段 使用的是unicode 显示所有的内容
bytes类型
传输和存储都是使用bytes
pycharm 存储的时候默认是使用utf-8
注意: pycharm是个坑, 一个py文件中所有相同的字符串 一般都是使用一样的内存地址