• 小数据池


    小数据池

    == ,id ,is

    两个等于我们都用过了,就是进行判断的。判断两边的值是否一样,例如

    a = 10
    b = 10
    print(a == b) 
    
    a = "alex"
    b = "alex"
    print(a == b)
    

    这样就是查看==两边的值是否一样.

    我们再来看看id是个什么东西,我们知道在定义一个变量的时候,内存空间中其实是开辟了一块空间,这个开辟的空间是有号码的,我们来试一下

    name = "alex"
    print(id(name))  
    # 4327876736
    

    is 也是判断,只不过这次判断的是两边值得内存地址是否相同,我们来看看

    a = 10
    b = 10
    print(id(a))  # 4304849568
    print(id(b))  # 4304849568
    print(a is b)  # True
    # 获取的结果是True是因为a和b的内存地址是相同的
    

    发现一个问题 == 和 is 都是True啊,这个is是判断内存地址是否一样,Python考虑到我们会经常定义一些值,需要开辟空间和销毁空间,它底层就维护了一个小数据池,这个小数据就是规定一个区间使用的是同一个内存地址,比如小数据池中数字的区间范围是 -5 ~ 256,我们刚刚测试的10在区间内,所以获取到的是相同的内存地址,我们试一试不在范围的数字

    a = 500
    b = 500
    print(id(a)) # 4344811120
    print(id(b)) # 4344811120
    print(a is b) # True
    

    不再区间内,怎么内存地址还是一样的啊。这就要说说python的另一个机制 — 代码块

    代码块是防止我们频繁的开空间降低效率设计的,当我们定一个变量需要开辟空间的时候,它会先去检测我们定义的这个值在空间中有没有进行开辟,如果没有开辟就开辟一个空间,如果内存中开辟过就使用同一个。

    一个文件,一个函数,一个模块,一个类,终端中一行就是一个代码块

    代码块支持:

    • 字符串:
      • 定义字符串的时候内容,长度任意内存地址相同。
      • 字符串进行乘法的时候总长度 <=20 内存地址相同。
      • 中文,特舒符号 乘法的时候只能乘以1或 0
    • 数字:
      • 相同的数字内存地址相同
    • 布尔值:
      • 相同的内存地址相同

    这就是我们为什么在pycharm中测试的时候都是True,我们现在去终端上测试一下数字的范围

    image-20190624142057797

    当代码块和小数据池两个在一起,先执行代码块

    我们知道了代码块支持的数据类型和支持怎样的操作,现在来看看小数据池的支持数据类型和范围:

    小数据支持:

    • 字符串:
      • 纯字母和数字的时候长度任意,内存地址相同。
      • Python36纯字母和数字乘法总长度 <= 20 内存地址相同。
      • Python37纯字母和数字乘法总长度 <= 4096 内存地址相同。
      • 中文和特殊符号乘法的时候只能乘以 0 内存地址相同
    • 数字:
      • -5 ~ 256
    • 布尔值:
      • True
      • False

    小数据池和代码块都是Python内置的,咱们开发的时候不使用,他们统称为驻留机制,有了小数据池和代码块能够提升Python的效率

    代码块:一个文件,一个函数,一个类,一个模块,终端中每一个行是一个代码块
    支持:
    
    数字:
      在同一代码块下 只要内容相同就采用相同的内存地址(-5以后就不是)
      数字在做乘法的时候范围 -5 ~ 256  ****
      数字在做乘法的时候不能使用浮点数
    字符串:
      在同一代码块下 只要内容相同就采用相同的内存地址
      乘法的时候总长度不能超过20   ****
      乘法的时候中文,特殊符号乘以1或0
    布尔值:
      在同一代码块下 只要内容相同就采用相同的内存地址
    
    小数据池:
    数字:  -5 ~ 256   ****
    字符串:
          在同一代码块下 只要内容相同就采用相同的内存地址
          乘法的时候总长度不能超过20   ****
          乘法的时候中文,特殊符号乘以0
    布尔值:
          在同一代码块下 只要内容相同就采用相同的内存地址
    
  • 相关阅读:
    05-浮动/css
    04-选择器/css
    03-样式表/css
    02-html标签&表格&表单
    01-html基础&标签
    vue分页组件重置到首页问题
    VUE通过索引值获取数据不渲染的问题
    常见IE8兼容性问题及解决
    Ajax
    sea.js模块化工具
  • 原文地址:https://www.cnblogs.com/luckinlee/p/11619904.html
Copyright © 2020-2023  润新知