Python缓存重用机制

一、Python的缓存重用机制
1、Python的缓存重用机制是为了提高程序的执行效率的。
缓存:程序会在内存里开辟一个空间,用来存放我们定义过的数据,方便我们在后续的程序里能直接提取到数据,提高代码效率。
重用:顾名思义,重复使用。
我们知道了缓存和重用的含义,我们组合在一起就可以知道缓存重用的大概意思:对于某些数据,再次定义时不是重新分配内存,而是检查之前是否有过此数据缓存,若有缓存,则直接拿到该数据地址;若缓存不存在时,才会分配内存空间。

2、接下来我们就看看在Python中,哪些数据是支持缓存重用机制的呢?
缓存机制的适用范围: int(float),str,bool。

a is b:判断a和b的内存地址是否相同
a == b:判断a和b值是否相同
代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块。
小数据池:python中有这样特别分配了这样的一个内存,里面存放的都是一些比较小的数据,当我们创建这些数据的时候,会直接从池子里提取,而不再是重新创建。可以这么理解,一些大的数据,必须之前在代码块中定义了才可以进行重用,而这些小数据,python内部就先给你定义好了,你可以直接进行重用机制。小数据池也是只针对 int(float),str,bool。

Python缓存重用规则
数据类型 重用规则 生效范围
范围在[-5,256]之间的整数 采用小数据池 全局
bool类型
字符串类型
大于 256 的整数 只要在本代码块内创建过,就直接缓存,后续不再创建。 本代码块
大于 0 的浮点型小数
小于 0 的浮点型小数 不触发重用机制,每次都要额外创建
小于 -5 的整数
二、代码实现
# 需要知道一个函数就是一个代码块,函数里和函数外是不同的代码块
a = 257
b = 256
c = -5
d = -6
e = True
f = ‘aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’
g = 0.1
h = -0.1

def test():
aa = 257
aaa = 257
bb = 256
bbb = 256
cc = -5
ccc = -5
dd = -6
ddd = -6
ee = True
eee = True
ff = ‘aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’
fff = ‘aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa’
gg = 0.1
ggg = 0.1
hh = -0.1
hhh = -0.1

print(‘大于256的整数,定义在不同代码块里’, aa is a)
print(‘大于256的整数,定义在同一个代码块里’, aaa is aa)
print(‘值为256的整数,定义在不同代码块里’, bb is b)
print(‘值为256的整数,定义在同一个代码块里’, bbb is bb)
print(‘值为-5的整数,定义在不同代码块里’, cc is c)
print(‘值为-5的整数,定义在同一个代码块里’, ccc is cc)
print(‘值小于-5的整数,定义在不同代码块里’, dd is d)
print(‘值小于-5的整数,定义在同一个代码块里’, ddd is dd)
print(‘bool值,定义在不同代码块里’, ee is e)
print(‘bool值,定义在同一个代码块里’, eee is ee)
print(‘字符串,定义在不同代码块里’, ff is f)
print(‘字符串,定义在同一个代码块里’, fff is ff)
print(‘大于0的浮点数,定义在不同代码块里’, gg is g)
print(‘大于0的浮点数,定义在同一个代码块里’, ggg is gg)
print(‘小于0的浮点数,定义在不同代码块里’, hh is h)
print(‘小于0的浮点数,定义在同一个代码块里’, hhh is hh)

test()

# 这里是结果
大于256的整数,定义在不同代码块里 False
大于256的整数,定义在同一个代码块里 True
值为256的整数,定义在不同代码块里 True
值为256的整数,定义在同一个代码块里 True
值为-5的整数,定义在不同代码块里 True
值为-5的整数,定义在同一个代码块里 True
值小于-5的整数,定义在不同代码块里 False
值小于-5的整数,定义在同一个代码块里 False
bool值,定义在不同代码块里 True
bool值,定义在同一个代码块里 True
字符串,定义在不同代码块里 True
字符串,定义在同一个代码块里 True
大于0的浮点数,定义在不同代码块里 False
大于0的浮点数,定义在同一个代码块里 True
小于0的浮点数,定义在不同代码块里 False
小于0的浮点数,定义在同一个代码块里 False

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论