python is和==的区别
面经血泪😭面试官问我:"None 为什么用 is 不用 ==?"
别看问题简单,答不好直接暴露 Python 底层功底👇
🧠 核心原因:None 是单例对象!
整个 Python 进程中只有一个 None。用 is 比较的是"你是不是那个唯一的 None"(查身份证),用 == 比较的是"你的值是不是等于 None"(查姓名)。
📦 生活类比: is = 查身份证号确认是不是同一个人 🆔 == = 问"你叫张伟吗"(重名的一大堆!)
⚡ 性能差异: is → 直接比较内存地址,O(1) 指针比较 ✅ == → 调用 __eq__ 方法,有函数调用开销 ❌
🚨 最危险的坑:
python
class Evil:
def __eq__(self, other):
return True 让所有 == None 都返回 True!
e = Evil()
print(e == None) True 😱
print(e is None) False ✅
如果自定义类重写了 __eq__,== None 结果完全不可控!
📋 PEP 8 明确说: "对 None 等单例的比较,应当始终使用 is 或 is not"
🔍 代码检查: Flake8 会对 == None 报 E711 警告
💡 一句话总结: is None = 问"你是 None 本人吗?" == None = 问"你的值等于 None 吗?" 判断身份用 is,判断值用 ==!
python 编程入门 none python进阶 技术科普 学习日常












