is 比较的是两个对象的id值是不是相称,也就是比较两个对象是不是为同一个实例对象,是不是指向同一个内存地址。
== 比较的是两个对象的内容是不是相称,默许会挪用对象的 __eq__ 要领。
== 是python规范操作符中的比较操作符,用来比较推断两个对象的值是不是相称。
相干引荐:《Python视频教程》
先来看一个例子
>>> a = [1, 2, 3] >>> b = a >>> b is a True >>> b == a True >>> b = a[:] >>> b is a False >>> b == a True
is 也被叫做同一性运算符,也就是id是不是雷同。
看下面代码, a和b变量的id差别, 所以 b == a 是True, b is a 是False.
再来看一下他们的id:
>>> id(a) 4364243328 >>> >>> id(b) 4364202696
哪些情况下 is 和 == 结果是完全雷同的?
>>> a = 256 >>> b = 256 >>> a is b True >>> a == b True >>> a = 1000 >>> b = 10**3 >>> a == b True >>> a is b False >>>
所以数字范例不完全雷同。
那为何256时雷同, 而1000时差别呢?
由于出于对机能的斟酌,Python内部做了许多的优化事情,关于整数对象,Python把一些频仍运用的整数对象缓存起来,保存到一个叫 small_ints 的链表中,在Python的全部生命周期内,任何须要援用这些整数对象的处所,都不再从新建立新的对象,而是直接援用缓存中的对象。
Python把这些能够频仍运用的整数对象规定在局限 [-5, 256] 之间的小对象放在 small_ints 中,但通常须要用些小整数时,就从这内里取,不再去暂时建立新的对象。
>>> c = 'miracle.young' >>> d = 'miracle.young' >>> c is d False >>> c == d True >>> c = 'miracleyoung' >>> d = 'miracleyoung' >>> c is c True >>> c == d True
所以字符串范例不完全雷同,这个和诠释器完成有关。
>>> a = (1,2,3) # a和b为元组范例 >>> b = (1,2,3) >>> a is b False >>> a = [1,2,3] # a和b为list范例 >>> b = [1,2,3] >>> a is b False >>> a = {'miracle':100,'young':1} # a和b为dict范例 >>> b = {'miracle':100,'young':1} >>> a is b False >>> a = set([1,2,3]) # a和b为set范例 >>> b = set([1,2,3]) >>> a is b False
所以当变量是数字、字符串、元组,列表,字典时,is 和 == 都不雷同, 不能交换运用!当比较值时,要运用 ==,比较是不是是同一个内存地址时应当运用is。
以上就是python中is和==号的区分的细致内容,更多请关注ki4网别的相干文章!