zoukankan      html  css  js  c++  java
  • python 基础之变量存储缓存机制与数据驻留小数据池

    一:变量存储的缓存机制

    在同一文件(模块)里,变量存储的缓存机制 (仅对python3.x版本负责),那么

    --对于Number (int bool float complex)

    1.对于整型而言,-5~正无穷范围内的相同值 id一致

    2.对于浮点数而言,非负数范围内的相同值 id一致

    3.布尔值而言,值相同情况下,id一致

    4.复数的id标识都不相同(在 实数+虚数 这样的结构中)


    (1) int -5 ~ 正无穷范围内
    var1 = 18
    var2 = 18
    print(id(var1),id(var2)) #相同
    var1 = -99
    var2 = -99
    print(id(var1),id(var2)) #不相同
    var1 = -6
    var2 = -6
    print(id(var1),id(var2)) #不相同

    2)float 非负数
    var1 = 3.15
    var2 = 3.15
    print(id(var1),id(var2)) #相同
    var1 = -6.88
    var2 = -6.88
    print(id(var1),id(var2)) #不相同

    (3) bool 在布尔值相同的情况下 值得地址相同
    var1 = False
    var2 = False
    print(id(var1),id(var2)) #相同

    (4) 在实数 + 虚数的情况下 永远不一样
    var1 = 5+3j
    var2 = 5+3j
    print(id(var1),id(var2)) #不相同
    '''只有虚数的情况下,例外'''
    var1 = 8j
    var2 = 8j
    print(id(var1),id(var2)) #相同


    对于容器类型部分 

    5.字符串而言,字符串值相同情况下,id一致

    6.列表,元组,字典,集合无论什么情况,id标识都不同(但空元组的id标识一样)

     

    (1)str
    var1 = "你"
    var2 = "你"
    print(id(var1),id(var2)) #相同

    (2)空元组
    var1 = ()
    var2 = ()
    print(id(var1),id(var2)) #相同

    (3)剩下所有的容器类型数据地址都不一样
    var1 = (1,2,3)
    var2 = (1,2,3)
    print(id(var1),id(var2)) #不相同

    var1 = []
    var2 = []
    print(id(var1),id(var2)) #不相同

    var1 = {'a':1}
    var2 = {'a':1}
    print(id(var1),id(var2)) #不相同

    二:数据驻留小数据池

    不同文件(模块)里,部分数据驻留小数据池中 (仅对python3.x版本负责)

    python提前在内存中创建了-5 ~ 256 范围的整数,驻留在了内存的一块区域.

    如果是不同文件(模块)的两个变量,并在此范围具有了相同的值,

    那么id一致.

    小数据池只针对:int ,string,bool,以及空元祖(),None关键字   有效

    对于字符串来说:

    (1)字符串的长度为0或者1,默认驻留小数据池

     

    (2)字符串的长度>1,且只含有大小写字母,数字,下划线时,默认驻留小数据池

    (3)用乘法得到的字符串,分两种情况。

    1)乘数为1时:

    无论什么字符串 * 1 , 都默认驻留小数据池

    2)乘数大于1时:

    乘数大于1,仅包含数字,字母,下划线时会被缓存,但字符串长度不能大于20

     

    指定驻留

    from sys import intern

    a = intern('盲僧&*^^1234'*10)

    b = intern('盲僧&*^^1234'*10)

    print(a is b)

    #可以指定任意字符串加入到小数据池中,无论声明多少个变量,只要此值相同,都指向同一个地址空间

     

    *无论是缓存机制还是小数据池的驻留机制,都是为了节省内存空间,提升代码效率

  • 相关阅读:
    可持久化BCJ
    Codeforces 911 三循环数覆盖问题 逆序对数结论题 栈操作模拟
    找不同
    最接近的三数之和
    找到所有数组中消失的数字
    三数之和
    小程序中的变量
    二叉树的最近公共祖先
    深拷贝和浅拷贝
    下载安装JDK
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/10787174.html
Copyright © 2011-2022 走看看