小数据池
1. id()
通过id()可以查看到一个变量表示的值在内存中的地址
s = "Agoni"
print(id(s))
# 2410961093272
2. is 和 ==
== 判断左右两端的值是否相等,是不是一致
is 判断左右两端的内存地址是否一致,如果返回True 可以确定这两个变量使用的是同一个对象
在Python中,默认会把数字, 字符串, 布尔值进行缓存
1. 当我们在控制台时(CMD) #按照这个记
数字: -5 ~ 256 之间的整数会被缓存
-
字符串:
- 长度小于等于1,会默认缓存
- 长度大于1. 如果字符串中只有数字,字母,下划线缓存
- 用乘法得到的字符串:①乘数是1 , 仅包括数字,字母,下划线时会被缓存② 乘数不是1,最终长度不能超过20
-
手动指定缓存
from sys import intern # intern 指定缓存内容
a = intern("Agoni@.com")
b = intern("Agoni@.com")
print(a is b) 布尔值
2. py文件里
py文件里,一个代码块内部, 只会缓存 int str bool .也有自己的小 数据池, 缓存范围回避外面的代码块的数据池大
1. 数字. 基本上都会缓存 运算结果不缓存( -5~256 会缓存)
- 字符串. 默认的字符串都缓存 如果有乘法 遵循上方的结论
- 布尔值. 默认缓存
再谈编码
在Python2里面 默认的编码是ASCII
在Python3中 UNICODE 是可以使用的, 默认用的就是UNICODE, 代码用UTF-8 来存储
-
编码? 把UNICODE 转换成UTF-8
s = "未来可期"
a = s.encode("UTF-8") # encode 之后的结果是bytes类型 依然是原来的字符串
print(a) # 打印结果 b'数据'
# b'\xe6\x9c\xaa\xe6\x9d\xa5\xe5\x8f\xaf\xe6\x9c\x9f' \x 表示是16进制 -
解码
a = b'\xe6\x9c\xaa\xe6\x9d\xa5\xe5\x8f\xaf\xe6\x9c\x9f'
s = a.decode("UTF-8")
print(s)
# 打印结果 未来可期GBK 不能用UTF-8 解码 , 必须用GBK解码 解码之后是UNICODE