python代码块和小数据池

id和is

在介绍代码块之前,先介绍两个方法:id和is,来看一段代码

 # name = "Rose"
# name1 = "Rose"
# print(id(name))
# print(id(name1)) # 两个id相同
# print(name == name1) # True
# print(name is name1) # True

执行结果

2257847297000
2257847297000
True
True Process finished with exit code 0

再来看一段代码

 l1 = [1, 2, 3]
l2 = [1, 2, 3]
print(id(l1))
print(id(l2)) # 两个id不一样
print(l1 == l2) # True
print(l1 is l2) # False

执行结果

1403309626952
1403309626888
True
False Process finished with exit code 0

发现规律了吗?id是获取内存地址,is是判断两个数据的内存地址是否相同,这与==是不一样的,==是判断两个数据的值是否相同。

代码块

什么是代码块?

代码块是python程序的一个单元,一个模块,一个函数,一个类,一个文件都是一个代码块;在cmd命令行里,一条命令就是一个代码块

代码块有什么用?

python在执行一个代码块的初始化对象命令时,会将其名称和值存储在字典中,在之后遇到新的初始化对象命令时,就会检查其值是否在字典里,如果存在,会将其重用,也就是后一个对象与之前的对象指向同一个值,这既是代码块的缓存机制。看到这里你可能就明白了代码块缓存机制的好处:就是节省内存;提高效率。因为如果没有缓存机制的话就要重新开辟内存,开辟内存不仅要消耗内存,还会耽误时间。看到这里有人就可能会问了:既然缓存机制有这么多好处,那为什么不在全局而只是在代码块里使用呢?

满足缓存机制则他们在内存中只有一个,也就是id相同。

代码块缓存机制的适用范围:int(float),bool,str

int(float):任何数字在同一代码块下都会复用。

bool:True和False在字典中会以1,0方式存在,并且复用。

str:几乎所有的字符串都会符合缓存机制

小数据池

小数据池,也称为小整数缓存机制,或者称为驻留机制等等

小数据池是针对不同代码块之间的缓存机制,其适用范围也是int(float),bool,str

int: -5~256

bool: 都满足

str: 满足一定规则的会驻留

 # l1 = [1, 2, 3]
# l2 = [1, 2, 3]
# print(id(l1))
# print(id(l2)) # 两个id不一样
# print(l1 == l2) # True
# print(l1 is l2) # False

总结

如果在同一代码块下,则采用同一代码块下的换缓存机制。

  如果是不同代码块,则采用小数据池的驻留机制。

上一篇:ConcurrentLinkedQueue代码解析


下一篇:springBoot 学习(总)