再谈编码
一. 小数据池
目的:缓存我们字符串,整数,布尔值, 在使用的时候不需要创建过多的对象.
缓存:int, str, bool.
int: 缓存范围 -5~256.
str: 缓存范围 1. 长度小于等于1. 直接缓存
2. 长度大于1, 字符串中如果只有数字, 字母, 下划线, 就会缓存.
3. 用乘法得到的字符串. 1). 乘数为1, 仅包含数字, 字母, 下划线时会被缓存. 如果包含其他字符, 而长度<=1 也会被驻存.
2). 乘数大于1 . 仅包含数字, 字母, 下划线这个时候会被缓存. 但字符串长度不能大于20.
4. 使用sys模块中的intern()缓存字符串.
代码块的关系: 如果在同一个代码块中, 默认的整数和字符串还有布尔值都会进行缓存. 如果涉及计算, 遵从上面的规则.
如果跨代码块, 按照上面的规则执行的.
优点: 能够提高一些字符串, 整数的处理速度, 省略创建对象的过程.
缺点: 在小数据池中创建或者插入新的内容会花费更多的时间.
二. is和==的区别
1. id() 通过id我们可以查到一个变量表示的值在内存中的地址.
2. is和==
== 是判断左右两端的值是否相等, 是不是一致的.
is 判断左右两端的内容的内存地址是否一致,如果返回True, 那就可以确定这两个变量使用的是同一个对象.
三. 编码的补充
1. bytes的表现形式.
1. 英文 b'alex' 英文的表现形式和字符串没什么两样.
2. 中文 b'\xe4\xb8\xad' 这是一个汉字的UTF-8的bytes表现形式.
2. decode和encode.
在python3的内存中. 在程序运行阶段. 使用的是unicode编码.
s = "joshua"
print(s. encode("utf-8")) unicode转utf-8.
print(s. decode("utf-8")) utf-8转unicode.
utf-8和gbk不能直接转换.