• python内存优化机制中的小秘密


    首先我们先来看一个这样的问题:

    1 a = -5
    2 b = -5
    3 print(a is b)
    4 
    5 c = -6
    6 d = -6
    7 print(c is d)
    8 
    9 # 输出结果是?

    大多数没踩过这个坑的小伙伴的答案要么都是True,要么都是False。

    但是,,,其真正的结果并不是如此。。。

    是不是感觉一脸懵逼???

    正确答案是:True 和 False

    是不是会在心里说what???  这不合乎逻辑啊。。。

    但是事实就是这样。

    这是由于python的内存优化机制造成的,Python在存储一些数字的时候,对内存做了相应的优化,导致了两个变量被赋值为同样小于-5的数字时,内存地址不一样,而对于大于-5的数字,其内存地址却是一样的。(python认为范围在[-5,256]的整数的使用对于用户来说,会在程序中像这样给变量赋值的次数较多,处于节省内存的考虑,将值在[-5,256]的整数的变量都指向了同一的内存地址,达到节省内存的目的)

     *  但是这也和编辑器有关(我在IDLE中测试的范围为[-5,256]的整数,而在pycharm上测试的范围为大于-5的整数。

    《python源码剖析》中的解释:

      对于小整数对象,可能在程序中会经常的使用。在python中,所有的对象都存活在系统堆上,如果将这些经常使用的小整数对象也放在系统堆上,python就会经常的在堆上申请空间,释放空间,会严重的影响python的整体性能。

      于是,对于小整数对象做了一些改变(优化),python中,对于小整数对象使用了对象池技术,将小整数对象对应的PyIntObject(不可变对象,在对象池中,每一个PyIntobject对象都能被任意的共享)缓存在内存中,并将其指针放在small_ints(小整数对象的对象池)中。

  • 相关阅读:
    一百三十二:CMS系统之前端动态获取后台添加的轮播图
    一百三十一:CMS系统之轮播图上传图片功能
    一百三十:CMS系统之七牛js和python的SDK使用示例
    Python中文件编码的检测
    三目运算符
    三级菜单
    购物车程序
    计算机进制转换
    Python字典练习题
    VS Code常用快捷键总结
  • 原文地址:https://www.cnblogs.com/aberwang/p/10403549.html
Copyright © 2020-2023  润新知