zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    哥德尔不完备定理
    关于欧拉公式证明的一个延拓
    关于贝叶斯定理的一个延拓
    贝克莱悖论
    自然数的公理化理论体系定义的新方法
    关于Spring中的<context:annotation-config/>配置
    <mvc:default-servlet-handler/>的作用
    web.xml context-param配置
    Spring JDBC框架操作mysql数据库
    Spring + JDBC example
  • 原文地址:https://www.cnblogs.com/chunbo/p/11210173.html
Copyright © 2011-2022 走看看