Python缓存重用机制
大约 3 分钟
Python 对象缓存重用机制
Python 缓冲机制是为提高程序执行的效率服务的,实际上就是在 Python 解释器启动时从内存空间中开辟出一小部分,用来存储高频使用的数据,这样可以大大减少高频使用的数据创建时申请内存和销毁时撤销内存的开销
Python 在存储数据时,会根据数据的读取频繁程度以及内存占用情况来考虑,是否按照一定的规则将数据存储缓存中
| 数据类型 | 是否可以重用 | 生效范围 |
|---|---|---|
| 范围在 [-5, 256] 之间的小整数 | 如果之前在程序中创建过,就直接存入缓存,后续不再创建。 | 全局 |
| bool 类型 | 如果之前在程序中创建过,就直接存入缓存,后续不再创建。 | 全局 |
| 字符串类型数据 | 如果之前在程序中创建过,就直接存入缓存,后续不再创建。 | 全局 |
| 大于 256 的整数 | 只要在本代码块内创建过,就直接缓存,后续不再创建。 | 本代码块 |
| 大于 0 的浮点型小数 | 只要在本代码块内创建过,就直接缓存,后续不再创建。 | 本代码块 |
| 小于 0 的浮点型小数 | 不进行缓存,每次都需要额外创建。 | - |
| 小于 -5 的整数 | 不进行缓存,每次都需要额外创建。 | - |
警告
业务判断值相等务必使用 ==;不要使用 is 做相等判断,避免被缓存机制坑到
示例代码
提示
id() 内置函数,该函数的功能是获取变量(对象)所在的内存地址。
#范围在 [-5, 256] 之间的小整数
int1 = -5
int2 = -5
print("[-5, 256] 情况下的两个变量:", id(int1), id(int2))
#bool类型
bool1 = True
bool2 = True
print("bool类型情况下的两个变量:",id(bool1),id(bool2))
#对于字符串
s1 = "3344"
s2 = "3344"
print("字符串情况下的两个交量", id(s1), id(s2))
#大于 256 的整数
int3 = 257
int4 = 257
print("大于 256 的整数情况下的两个变量", id(int3), id(int4))
#大于 0 的浮点数
f1 = 256.4
f2 = 256.4
print("大于 0 的浮点数情况下的两个变量", id(f1), id(f2))
#小于 0 的浮点数
f3 = -2.45
f4 = -2.45
print("小于 0 的浮点数情况下的两个变量", id(f3), id(f4))
#小于 -5 的整数
n1 = -6
n2 = -6
print("小于 -5 的整数情况下的两个变量", id(n1), id(n2))输出结果
[-5, 256] 情况下的两个变量: 1792722416 1792722416
bool类型情况下的两个变量: 1792241888 1792241888
字符串情况下的两个交量 2912801330712 2912801330712
大于 256 的整数情况下的两个变量 2912801267920 2912801267920
大于 0 的浮点数情况下的两个变量 2912762210728 2912762210728
小于 0 的浮点数情况下的两个变量 2912762211016 2912762211040
小于 -5 的整数情况下的两个变量 2912801267952 2912801267984以上输出结果中,每行都输出了 2 个相对应的变量所在的内存地址,如果相等,则表明 Python 内部对其使用了缓存机制,反之则没有
