• python中is和==的区别


    python中is和==的区别:

    首先我们先理解四个概念:

    1. 变量:可以是数字,也可以是任何数据类型
    2. 代码块:
       python程序时由代码块组成。程序执行的最小基本单位是代码块。一个模块文件、一个函数体、一个类、交互式命令行中的单行代码都是一个代码块。凡是不可变对象在同一个代码块中的对象,只要值相等的对象都不会被重复创建。不仅是整型,字符串也遵循以上规则。
    3. 内存:
       内存是电脑硬件用来存放数据的,可理解为:内存是由一个个小格子组成的,每个小格子大小是一个字节(byte),只能存放1byte的数据。当找这些数据时只能通过内存地址来查找。
    4. 地址:
       地址是内存的标识符,相当于门牌号。
       找内存地址-->操作内存-->表现为:操作变量

    is和==的区别:

    在python中一切皆对象,对象之间能否用“==”和“is”,区别在于:

    • is比较两个对象的id值是否相等,爷爷就是比较两个对象是否为同一个实例对象,是否指向同一块内存
    • ==比较两个对象内容是否相同,默认调用对象的__eq__()方法
    • 于性能考虑,python内部做了很多优化工作,对于整数对象,python把一些频繁使用的整数对象缓存起来,保存到samll_ints的链表中。在python的整个生命周期中,任何调用这些小整数时都不需要再重新创建对象 ,范围是[-5,256]。
      注意:
    • 小整数[-5,256]是全局解释器内重复使用,永远不会回收
    • 同一个代码块中的不可变对象,只要值相等就不会创建新的对象
    • 字符串中单个20以内,内存地址是一样的。并且不能有特殊字符,必须全部由字母组成,如果超过21则地址会不一样
    • 在一个py文件中,情况类似,但有不一样的地方:
    1. int类型:只要在同一个代码块中的值相同则地址相同
    2. str类型:只要长度不超过20,哪怕含有特殊字符,地址也相同
    如有问题可联系QQ:2499578824
  • 相关阅读:
    笔试题 输出金字塔 面试经典
    C++ 函数, 虚函数, 纯虚函数
    EJB 根据beanName引用EJB
    【J2EE性能分析篇】JVM参数对J2EE性能优化的影响【转】
    C++ 引用和指针作为函数参数的例子。请不要拍砖
    lucene 总结
    二维数组按列序号排序 面试经典
    http://www.linuxidc.com/Linux/201004/25494.htm
    银行取款费用
    PHP 生成 csv 文件时乱码解决
  • 原文地址:https://www.cnblogs.com/chunbo/p/11210173.html
Copyright © 2020-2023  润新知