• 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

    总结

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

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

  • 相关阅读:
    spring3.0使用annotation完全代替XML(续)
    spring3.0使用annotation完全代替XML
    Hibernate Session中的save(),update(),delete(),saveOrUpdate() 细粒度分析
    SpringMVC介绍之Validation
    Mysql 5.7 使用SSL安全连接
    深入分析Java ClassLoader原理
    Hibernate 动态分页查询
    【翻译自mos文章】Linux的/var/log/messages是空的(0k),messages.0, messages.1也是空的
    <html>
    Android Notification和权限机制探讨
  • 原文地址:https://www.cnblogs.com/zzliu/p/10182022.html
Copyright © 2020-2023  润新知