python is和==的区别

Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。

s和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同.

官方文档中说 is 表示的是对象标示符(object identity),而 == 表示的是相等(equality)。is 的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样,而 == 是用来检查两个对象是否相等。

  • is比较的是对象标识符,用来检查对象的标识符是否一致,即两个对象在内存中的地址是否一致。在使用a is b的时候,相当于是做id(a)==id(b)判断。
  • ==比较两个对象的值是否相等,相当于调用__eq__()方法,即a==b等同于a.__eq__(b)
>>> x = y = [4,5,6]  #这里x和y保存的地址相同,也就是id相同
>>> z = [4,5,6]  #z和x,y仅仅是值相同,保存地址不同
>>> x == y   #==只判断值是否相等
True
>>> x == z
True
>>> x is y   #is判断是否是同一地址的相同值
True
>>> x is z
False
>>>
>>> print id(x)
3075326572
>>> print id(y)
3075326572
>>> print id(z)
3075328140

Python里和None比较时,为什么是 is None 而不是 == None 呢?

因为PEP8有以下规定

“Comparisons to singletons like None should always be done with ‘is’ or ‘is not’, never the equality operators.”
— From PEP8
如上所述None在Python里是个单例对象,一个变量如果是None,它一定和None指向同一个内存地址。None是python中的一个特殊的常量,表示一个空的对象。空值是Python中的一个特殊值,数据为空并不代表是空对象,例如[],'',(),{}等都不是None。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值