初学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中变量和内存地址的知识,传送门