python中 is 和 ==的区别

初学python时,遇到 is ,感觉和==很像
示例代码

a=5
b=5
a is b
True
a ==b
True

咋一看,感觉一模一样
两者有什么区别?
先给答案
is 比较的是两个变量的的 id
== 比较的是两个变量的 value(值) 是否相等
那什么是id,value呢?
首先,python中万物皆是对象,每个对象都至少有 id,value,type三个属性。
言归正传,id是什么呢?
一个对象的id值在CPython解释器里就代表它在内存中的地址
就是变量的值
举个例子

a=-5
b=-5
id(a)#Out[4]: 1885122912
id(b)#Out[5]: 1885122912
id(-5)#Out[6]: 1885122912
a is b#Out[7]: True  
#  a 和 b的 id都是1885122912,相等,所以 a is b 返回True
a == b #Out[8]:True
 #  a 和 b的 value都是5,相等,所以 a == b 返回True

举一个a ==b 和a is b返回结果不一样的例子

a =-6
b =-6
a ==b  #True 
a is b #False
#为什么 这一次 a is b 返回的结果是false呢?

python中,为了提高内存的利用率,对小整数[-5,256]进行了缓存,
所以当变量的值为这些小整数【-5,256】时,他们的id值都相等。
其他范围整数如-6,或者其他的类型的数据,id(内存值)就会不相等
例如

a=[]
b=[]
a is b 
False

结论:
is 方便判断两个变量id值是否相同,相同则引用同一个地址的对象
== 判断两个变量的值是否相等
想要深入了解python中变量和内存地址的知识,传送门

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值