id和is
在介绍代码块之前,先介绍两个方法:id和is,来看一段代码
1 # name = "Rose" 2 # name1 = "Rose" 3 # print(id(name)) 4 # print(id(name1)) # 两个id相同 5 # print(name == name1) # True 6 # print(name is name1) # True
执行结果
2257847297000 2257847297000 True True Process finished with exit code 0
再来看一段代码
1 l1 = [1, 2, 3] 2 l2 = [1, 2, 3] 3 print(id(l1)) 4 print(id(l2)) # 两个id不一样 5 print(l1 == l2) # True 6 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: 满足一定规则的会驻留
1 # l1 = [1, 2, 3] 2 # l2 = [1, 2, 3] 3 # print(id(l1)) 4 # print(id(l2)) # 两个id不一样 5 # print(l1 == l2) # True 6 # print(l1 is l2) # False
总结
如果在同一代码块下,则采用同一代码块下的换缓存机制。
如果是不同代码块,则采用小数据池的驻留机制。
原文地址:https://www.cnblogs.com/zzliu/p/10182022.html
时间: 2024-10-02 01:49:09