美文网首页Python/Go开发
python中is和==的区别

python中is和==的区别

作者: 碎云星河 | 来源:发表于2019-01-02 17:06 被阅读0次

python有很多运算符,其中is和==用的会比较多。此二者有些时候可以通用,作为相等比值来使用。但是有些时候二者是不能划等号的:比如:

a = 257
b = 257
print(a is b)
print(a == b)
out1: False
out2: True

很显然能看到a is b与a == b的返回值并不相等。这是为什么呢?
首先在讲is和==之前,我们要知道python的对象包含 三个基本要素:id(身份标识),type(对象类型),value(对象值)

==比较操作符和is同一性运算符区别

  • ==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等,例如下面两个字符串间的比较:
>>> a = 'cheesezh'
>>> b = 'cheesezh'
>>> a == b
True
  • is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个list间的比较,你就会明白is同一性运算符的工作原理:
>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>>
>>> print id(x)
3075326572
>>> print id(y)
3075326572
>>> print id(z)
3075328140

前三个例子都是True,这什么最后一个是False呢?x、y和z的值是相同的,所以前两个是True没有问题。至于最后一个为什么是False,看看三个对象的id分别是什么就会明白了。

  • 最后看一下这个,再来理解一下is和==的区别:
>>> a = 1 #a和b为数值类型
>>> b = 1
>>> a is b
True
>>> id(a)
14318944
>>> id(b)
14318944
>>> a = 'cheesezh' #a和b为字符串类型
>>> b = 'cheesezh'
>>> a is b
True
>>> id(a)
42111872
>>> id(b)
42111872
>>> a = (1,2,3) #a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> id(a)
15001280
>>> id(b)
14790408
>>> a = [1,2,3] #a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> id(a)
42091624
>>> id(b)
42082016
>>> a = {'cheese':1,'zh':2} #a和b为dict类型
>>> b = {'cheese':1,'zh':2}
>>> a is b
False
>>> id(a)
42101616
>>> id(b)
42098736
>>> a = set([1,2,3])#a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False
>>> id(a)
14819976
>>> id(b)
14822256

总结

>>> x = -5
>>> y = -5
>>> x is y
True
>>>
>>> x = -6
>>> y = -6
>>> x is y
False
>>>
>>> x = 256
>>> y = 256
>>> x is y
True
>>> x = 257
>>> y = 257
>>> x is y
False
>>>

# 数字限于[-5, 257)

事实上Python 为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。而Python 对小整数的定义是 [-5, 257),只有数字在-5到256之间它们的id才会相等,超过了这个范围就不行了,同样的道理,字符串对象也有一个类似的缓冲池,超过区间范围内自然不会相等了。
总的来说,只有数值型和字符串型,并且在通用对象池中的情况下,a is b才为True,否则当a和b是int,str,tuple,list,dict或set型时,a is b均为False。

相关文章

  • 逻辑运算符和位运算符

    Python 中 (&,|)和(and,or)之间的区别_Python_Rowlingz-CSDN博客

  • Python 中 is 和 == 的区别

    Python 中的 is 和 == 今天聊一下Python中的 is 和 == 运算符的区别、 is和==都是对对...

  • 算术运算符

    需要注意的是幂:**取整除://"//"和'/'的区别是,在python2中没有区别,在python3中,'/'得...

  • Python中 is 和 == 的区别

    是不是很诧异,a, b都是‘hello’的时候is和==都是True,为什么是‘hello world’的时候就不...

  • Python 中 is 和== 的区别

    初学python的时候,发现python中== 用来比较两个string的值,之前用java的话,比较string...

  • python 中is和= = 的区别

    Python中的对象包含三要素:id、type、value 其中id用来唯一标识一个对象,type标识对象的类型,...

  • Python中is和==的区别

    Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么。 在讲is和==这两种运...

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

    is比较的是内存地址(可以用id()查看内存地址) ==比较值先在shell中输入以下代码:image.png 在...

  • Python中is和==的区别

    要理解Python中is和==的区别,首先要理解Python对象的三个要素: is和==区别 程序举例 例1: 例2:

  • Python中 is 和 == 的区别

    Python中的对象包含三要素:id、type、value。 id 用来唯一标识一个对象,type 标识对象的类型...

网友评论

    本文标题:python中is和==的区别

    本文链接:https://www.haomeiwen.com/subject/muzzlqtx.html