zoukankan      html  css  js  c++  java
  • 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]的那段代码的正确性。

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

  • 相关阅读:
    CICD : 存代码部署(精简版)
    CICD:通过Shell 将打包后的代码部署到各环境
    linux:curl 取得HTTP返回的状态码
    闭包简单的了解
    javascript正则表达式了解
    搭建PHP开发环境(四)-PHP操作MySQL
    搭建PHP开发环境(三)-MySQL安装配置
    搭建PHP开发环境(二)-PHP安装
    搭建PHP开发环境(一)-Apache安装配置
    生成简单验证码文字
  • 原文地址:https://www.cnblogs.com/wangyi0419/p/12501598.html
Copyright © 2011-2022 走看看