• python的代码块缓存机制,小数据池机制。


    同一代码块的缓存机制

    在python中一个模块,一个函数,一个类,一个文件等都是一个代码块。

    机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即:id相同。

    适用对象 int(float),str,bool。

    对象的具体细则:(了解)

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

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

      str:几乎所有的字符串都会符合缓存机制,具体规定如下(了解即可!):

    1,非乘法得到的字符串都满足代码块的缓存机制:

    s1 = '太白@!#*ewq'
    s2 = '太白@!#*ewq'
    print(s1 is s2)  # True

    2,乘法得到的字符串分两种情况:

      2.1 乘数为1时,任何字符串满足代码块的缓存机制:

    b1 = '太白@5847395QQ0743895*&^%$#((&_+(())' *1
    a1 = '太白@5847395QQ0743895*&^%$#((&_+(())' *1
    
    print(a1 is b1)  # True

      2.2 乘数>=2时:仅含大小写字母,数字,下划线,总长度<=20,满足代码块的缓存机制:

    s1 = 'old_' * 5
    s2 = 'old_' * 5
    print(s1 is s2)  # True

     优点:能够提高一些字符串,整数处理人物在时间和空间上的性能;需要值相同的字符串,整数的时候,直接从‘字典’中取出复用,避免频繁的创建和销毁,提升效率,节约内存。

    小数据池

    小数据池,不同代码块的缓存机制,也称为小整数缓存机制,或者称为驻留机制等等

    Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。

    python会将一定规则的字符串在字符串驻留池中,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象, 而是使用在字符串驻留池中创建好的对象。

      其实,无论是缓存还是字符串驻留池,都是python做的一个优化,就是将-5~256的整数,和一定规则的字符串,放在一个‘池’(容器,或者字典)中,无论程序中那些变量指向这些范围内的整数或者字符串,那么他直接在这个‘池’中引用,言外之意,就是内存中之创建一个。

    适用对象 int(float),str,bool 

  • 相关阅读:
    1055. [HAOI2008]玩具取名【区间DP】
    BZOJ2435:[NOI2011]道路修建 (差分)
    1084. [SCOI2005]最大子矩阵【网格DP】
    1060. [ZJOI2007]时态同步【树形DP】
    1050. [HAOI2006]旅行【并查集+枚举】
    2463. [中山市选2009]谁能赢呢?【博弈论】
    luogu P1195 口袋的天空
    luogu P1162 填涂颜色
    luogu P1223 排队接水
    luogu P1331 海战
  • 原文地址:https://www.cnblogs.com/chen55555/p/11284936.html
Copyright © 2020-2023  润新知