核心要点

  • == 比较值相等,is 比较对象身份(id)

  • 知道小整数/短字符串 intern 现象

  • None 判断必须用 is

简要回答

== 调用 eq 比较值是否相等;is 比较是否为同一对象(同一 id)。判断 None 用 is None,不要用 == None

标准回答

运算符 含义 触发
== 值相等 __eq__
is 身份相同(同一对象) 比较 id(a) == id(b)
python
a = [1, 2]
b = [1, 2]
a == b   # True,内容相同
a is b   # False,不同对象

x = None
x is None  # 推荐

陷阱:CPython 缓存小整数 [-5, 256],a = 256; b = 256; a is b 可能 True;a = 257; b = 257 通常 False。不要依赖 is 比较值相等

自定义类:可重写 __eq__;若重写 __eq__ 且想可哈希,须实现一致的 __hash__ 或设 __hash__ = None

回答思路

  • 【定义】用一句话说清「Python 中 == 与 is」

  • 【原理】讲清关键机制或步骤(2~3 点)

  • 【例子】举一个真实项目、论文或产品中的例子

  • 【对比】与易混淆概念或替代方案比较(如有)

  • 【收尾】总结适用场景 + 一个局限或风险

延伸学习

结合侧栏延伸学习中的知识库与术语;行业背景见 AI 资讯(永久保留)。相关:资讯

常见误区

⚠️ 常见踩坑

is 比较字符串或数字是否「相等」;if x == True 应写 if x is Trueif x

追问

追问 1为什么 `if x is None` 优于 `if x == None`?

is None 检查身份,快且明确。== None 会调用 x 的 __eq__,可能被重载产生意外;且 PEP 8 明确推荐 is/is not 与 None 比较。

追问 2numpy 数组能用 == 吗?

arr1 == arr2 返回逐元素布尔数组,不是单个 bool。整体相等用 np.array_equal(arr1 == arr2).all()is 仍比较对象身份。

追问 3__eq__ 和 __hash__ 有什么关系?

a == b 则要求 hash(a) == hash(b)。定义 __eq__ 未定义 __hash__ 则类不可哈希。可变容器通常 __hash__ = None

🔗 相似问题

同一考点的不同问法,换着练更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习