Python中 is和 ==的区别

Python 中对象包含的三个基本要素,分别是:
1 .id(身份标识)
2 .type(数据类型)
3 .value(值)
对象之间比较是否相等可以用==,也可以用is 。
is 和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪?

is 比较的是两个对象的 id 值是否相等,也就是比较两个对象是否为同一个实例对象,是否指向同一个内存地址 。
== 比较的是两个对象的内容是否相等,默认会调用对象的 eq 方法
==是python 标准操作符中的比较操作符,用来比较判断两个对象的值是否相等。
先来看一个例子

is 也被叫做同一性运算符,也就是id 是否相同。
看下面代码,a 和b 变量的id 不同,所以b == a 是True ,b is a 是False.

再来看一下他们的id :

哪些情况下is 和==结果是完全相同的?

所以数字类型不完全相同。
那为什么256 时相同,而1000 时不同呢?
因为出于对性能的考虑,Python 内部做了很多的优化工作,对于整数对象,Python 把一些频繁使用的整数对象缓存起来,保存到一个叫small_ints 的链表中,在Python 的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对
象,而是直接引用缓存中的对象。
Python 把这些可能频繁使用的整数对象规定在范围[-5, 256]之间的小对象放在small_ints 中,但凡是需要用些小整数时,就从这里面取,不再去临时创建新的对象。

所以字符串类型不完全相同,这个和解释器实现有关。

所以当变量是数字、字符串、元组,列表,字典时,is 和==都不相同,不能互换使用! 当比较值时,要使用 == ,比较是否 是同一个内存地址时应该使用 is
当然,开发中比较值的情况比较多。

Original: https://www.cnblogs.com/emanlee/p/16124356.html
Author: emanlee
Title: Python中 is和 ==的区别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/9220/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总