Python中“is”和“==”区别

is 和 ==区别

1.先理解三个概念:
  • 变量: 用来 indentify (标识) 一块内存区域。为了方便表示内存,操作变量的实质:操作变量指向的那块内存单元。编译器负责分配内存,可以使用python内建函数 id() 来获取变量地址, id(object) 返回对象object在其生命周期内位于内存中的地址。

  • 内存: 内存是电脑硬件用来存放数据的,可理解为:内存有一个个小格子组成,每个格子的大小是一个byte只能存放1byte的数据。怎么找到这些数据呢,要靠内存地址来找。地址是内存的标识符,相当于门牌号。
    找内存地址 -->操作内存 -->表现为:操作变量

  • 代码块: python是程序由代码块组成。程序执行的最小基本单位是代码块。一个模块文件、一个函数体、一个类、交互式命令行中的单行 代码,每一行都是一个代码块,只要是值相同的不可变对象都不会被重复创建(节省内存)。
    在3.6.5中(3.7.x不适用),在一个py文件中,情况类似,但是有不一样的地方:
    1.int类型:只要在同一个代码块中的值相同,地址则相同。
    2.str类型:只要长度不超过20,哪怕含有特殊字符,地址也相同

2.区别
  • 在python中一切都是对象,对象之间能否用‘==’和‘is’,区别在于:
    is 比较两个对象的id值是否相等,也就是比较两个对象是否为同一个实例对象是否指向同一块内存
    == 比较两个对象的内容是否相等,默认调用对象的 __eq()__方法。

  • python 内部做了优化工作,对于整数对象,python把一些频繁使用的整数对象呢缓存起来,保存到small_ins的链表中,在python的整个生命周期中,任何调用这些小整数的地方都不需要重新创建一个对象。范围是[-5,256]
    注意:小整数对象[-5,256]是全局解释器内重复使用,永远不会被回收。同一个代码块中的不可变对象,只要值相等,就不会创建新的对象
    (字符串中单个20以内,内存地址是一样的,并且不能有特殊字符,必须全部由字符组成。)(python3.7以及之后的版本不适用,区别在字符串中单个4096)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值