千家信息网

Python 中 "is" 与 "==" 有什么区别?

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这期内容当中小编将会给大家带来有关Python 中 "is" 与 "==" 有什么区别?,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在 Python 中,比较两个
千家信息网最后更新 2025年12月03日Python 中 "is" 与 "==" 有什么区别?

这期内容当中小编将会给大家带来有关Python 中 "is" 与 "==" 有什么区别?,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

在 Python 中,比较两个对象(变量)是否相等,可以用 "is" 和 "==" 操作,但它俩有什么区别?什么时候用 "is",什么时候用 "==" ?在面试时,发现不少候选人很难把这两者完全说清楚,因此在这篇文章中,「Python之禅」将对二者进行深入浅出的对比介绍。

先举个例子

小黄最近手头非常宽裕,花重金购买了一辆 P90D 特斯拉,我们暂且给这车取名叫 "小P" ,这辆车和隔壁老王家的车(车名叫 "小 王")是一模一样的,无论是型号、外表还是价格都一样,是同批次生产的。这里我们可以说 "小P" 和"小王"是两辆一模一样的、相等的(euqal),但本质上这是两个不同的对象。有一天小君给他的爱车又取了一个网名叫 "爱驹",当我们说 "小P" 的时候其实就是在讨论 "爱驹",因为本质上两个名字指的是同一个对象,这里我们把 "小P" 和 "爱驹" 称为完全相等的(identical)。

在 Python 中,"==" 和 "is" 的区别可类比这个例子 ,前者是相等性比较,比较的是两个对象中的是否相等,后者是一致性比较,比较的是两个对象的内存空间地址是否相同。

显然,如果内存地址相同,那么他们的值肯定也是一样的,因此,如果 "is" 返回 True,那么 "==" 一定也返回 True,反之却不成立。

talk is cheap, show me the code

先创建一个列表对象,然后给它指定一个名字 a,再定义另外一个变量 b,让它指向同一个对象。

>>> a = [1, 2, 3]
>>> b = a

a 和 b 打印的值都是相等的,因为这两个变量指向的是同一个对象,就好比给一辆车起了两个不同的名字。

>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

理所当然, is 和 == 都返回 True。

>>> a == b
True
>>> a is b
True

创建一个新的对象,尽管值是一样的,但是他们本质上是两个不同的对象,处在两个不同的内存空间,因此 "is" 返回的是 False,但它们的值是相同的,所以 "==" 操作返回 True

>>> c = [1,2,3]
>>> a is c
False
>>> a == c
True

有且当仅比较的两个变量指向同一个对象时 "is" 才返回 True,而 "==" 最终取决于对象的 __eq__() 方法,本质上两个变量进行 "==" 比较调用的是对象的 __eq__() 方法。例如:

>>> class Foo(object):
def __eq__(self, other):
return True

>>> f = Foo()
>>> f == 1
True
>>> f == None
True
>>> f is None
False

因为自定义类 Foo 的 eq 方法恒返回 True,因此它与任何对象进行 "==" 都是返回 True。而它与 None 是两个不同的对象,因此 'is' 操作返回的是 False。

最后请大家思考这段代码,为什么同样的操作会有不同的结果

>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = 123
>>> b = 123
>>> a is b
True

上述就是小编为大家分享的Python 中 "is" 与 "==" 有什么区别?了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

对象 两个 不同 变量 本质 相同 内存 名字 指向 方法 时候 一模一样 例子 内容 地址 就是 空间 篇文章 分析 宽裕 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 陕西司法网络安全知识竞赛 软件开发公司的官网 中国象棋棋谱数据库 长沙软件开发培训去哪好 网络安全案件一案双查方案 vc控制台显示行数据库 广州千网网络技术有限公司 相亲男软件开发 银行的ATM存取款机业务数据库 数据库如何表示第一个子元 芯片仿真对服务器的要求 软件开发自我介绍求职 银行开展国家网络安全宣传报道 大学的网络技术有哪些 电子商务什么是服务器托管 计算机网络技术实训与练习 云服务器和本地网络互通 国家推进网络安全认证体系 db2数据库安装windows 省网络安全和信息化发展大会 db2数据库查询用户密码 保亭网络安全 服务器怎么激活作弊 科技创新和互联网金融联系方式 新疆教师网络技术培训 查看数据库表的列名 软件开发培训招生标语 上海乐虞网络技术有限公司好吗 推广网络安全有什么意义 恒生电子软件开发电脑
0