• Python 中的驻留机制:小数据池和代码块


    Python 中的驻留机制:小数据池和代码块

    Python 中的驻留机制主要有两个:小数据池和代码块。驻留机制并不是学习 Python 过程中特别重要的概念,我们学习小数据池的目的主要有两个方面:

    1. 解决日后写代码过程中可能出现的疑惑。在后期开发中,能 明确 知道有些代码为什么不能正常使用
    2. 找工作面试时或多或少可能被问到,关键时刻起到装 X 的作用

    先补充一个关键字 isis(是)==(等于) 的作用十分相似,我们在这里将它们进行一个对比:

    == :
    	官方:判断等号两边的内容是否相同
    	白话:判断两个人的长相是不是一样
    is :
    	官方:判断两边的内容是不是同一个
    	白话:判断这两个人是不是同一个人
    

    is 是通过 内存地址 进行判断,如果 内存地址 相同,返回 True;内存地址不同,返回 False

    有了上面的补充,我们来看下面的这个例子:

    a = 1000
    b = 1000
    print(a == b)
    print(id(a), id(b))
    print(a is b)	# 判断a是不是b
    
    在PyCharm中的运行结果是:
    True
    2565251570544 2565251570544
    True
    在终端中的运行结果是:
    True
    1407133449136 1407133448880
    False
    

    在 PyCharm 中运行时我们发现,虽然 a 和 b 分别赋值 1000,它们在内存中的地址居然是相同的。而在终端中运行同样的代码,却又得到了 a 与 b 不相同的结果。

    这是 Python 中的驻留机制造成的影响。Python 中,为了节省内存,会将一些小的数据驻留,当再次有变量获得相同的赋值时,不会开辟新的内存空间,而是指向原有的值所处的内存空间。

    在 PyCharm 中运行的是一个 py 文件,是一个代码块。在代码块中,只要是大于 -5 的数字都共用同一个内存地址。而在终端中每一行分别为一个代码块,两个赋值操作共用一个小数据池。在小数据池中,只有在 -5 ~ 256 范围的数字才会被驻留。

    小数据池和代码块的缓存机制是这样的:

    终端中测试的是小数据池的缓存机制:
    	数字:-5 ~ 256
    	字符串:
    	定义时内容不能为中文和特殊符号,长度不限,只要内容相同,就会进行驻留
    	Python 3.6解释器字符串进行乘法时,也不能有中文字符和特殊符号,总长度不能超过20
    	Python 3.7解释器字符串进行乘法时,不能有中文字符和特殊符号,总长度不能超过4096
    
    PyCharm中测试的是代码块的缓存机制:
    	数字:-5 ~ 正无穷
    	字符串:
    	定义内容、长度均不限,只要内容相同,就会驻留
    	字符串进行乘法时,不能有中文字符和特殊符号,总长度不能超过20
    

    对于字符串总长度的驻留情况,可以这样检验:

    a = 'alex' * 6
    b = 'alex' * 6
    print(a is b)
    
  • 相关阅读:
    各种blog尝试后,发现wordpress适用起来最方便
    索引器(C# 编程指南)
    vue3 父子组件之间的传值
    vue3 + vite + ts 搭建项目
    vue3中使用全局变量
    用JSONKit库解析json文件
    程序内部让用户直接上appstore评价游戏的链接地址以及跳转方法
    常见错误:Apple MachO Linker Error
    常见错误:多线程界面元素显示错误
    常见错误:Undefined symbols for architecture i386
  • 原文地址:https://www.cnblogs.com/shuoliuchina/p/12430809.html
Copyright © 2020-2023  润新知