python代码块和小数据池

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

总结

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

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

猜你喜欢

转载自www.cnblogs.com/zzliu/p/10182022.html