• python中的关于is的奇怪现象


    【Python 3.7.0】

    python中is比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象,是否指向同一个内存地址。

    在实际使用过程中我发现,is有时有点奇怪。

    在python交互式模式中:

    发现有些整数is的值是True,有些是False,为何会这样?到底哪些整数不会新建对象呢?

    在py文件中写个程序测一下:

    发现在-5到256之间的整数不会新建对象。

    出于性能优化,对于整数对象,Python把一些频繁使用的整数对象[-5-256]缓存起来,保存到一个叫small_ints的链表中,有的称小整数对象池,在Python的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对象,而是直接引用缓存中的对象。

    但是在py文件中:

    这可真是奇怪呀,怎么这个也是True了呢?这个也不会新建对象?

    后来在函数里试试:

    如果把函数看成一个代码块,那么可以总结一下:

    在同一个代码块内:

    对于不可变类型的对象如数字,字符串,布尔值,元组,多个变量会共享一个对象。这些变量指向同一片内存地址。可变类型的如列表字典集合之流就会新建对象。


    在不同代码块之间:
    除整数[-5-256]之外的数字都会新建对象;
    带特殊字符的字符串会新建对象;
    元组列表集合都会新建对象。
    。。。

    这间接证明了我上面的寻找不变对象的整数[-5-256]的那段代码的正确性。

    至此,我发现了一个规律,那就是这玩意根本就没规律,说白了就是扯淡。哎,浪费我时间去研究,好气啊~~

  • 相关阅读:
    zabbix源码安装
    利用Linux系统生成随机密码的8种方法
    Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
    Jenkins的参数化构建
    Jenkins中maven的作用--构建项目(三)
    Beans(dp,两次dp)
    Piggy-Bank(完全背包)
    Super Jumping! Jumping! Jumping!(dp)
    01串(dp)
    钱币兑换问题(完全背包)
  • 原文地址:https://www.cnblogs.com/wangyi0419/p/12501598.html
Copyright © 2020-2023  润新知