Python中is和is not用于判断变量是否指向同一对象(内存地址相同),而非值相等;与==有本质区别,推荐仅用于None、True、False等单例比较。

Python中的身份运算符 is 和 is not 用于判断两个变量是否指向**同一个对象**(即内存地址是否相同),而不是比较值是否相等。这点和 == 完全不同,初学者容易混淆。
is 与 == 的本质
is 检查的是对象的身份(id),也就是是否为同一块内存;== 检查的是对象的值是否相等(由 __eq__ 方法决定)。
- 数值小整数(-5 到 256)和短字符串会被 Python 缓存,此时 a == b 和 a is b 可能同时为 True,但这属于优化行为,不能依赖
- 列表、字典、自定义对象等可变类型,即使内容相同,也几乎总是 is False
什么时候该用 is
最常见且推荐的使用场景是和单例对象比较,尤其是 None:
-
if x is None:✅ 推荐写法(语义明确、性能好) -
if x == None:❌ 不推荐(可能被重载,且语义不清) -
if x is True:或if x is False:—— 仅在需要严格区分 bool 对象本身时使用(一般用 if x: 更自然)
is not 的正确用法
is not 是 is 的否定形式,语义更清晰,比 not (a is b) 更推荐:
阿里云出品的一款基于通义大模型的智能编码辅助工具,提供代码智能生成、研发智能问答能力
304 立即学习“”;
-
if x is not None:✅ 清晰、高效、符合 PEP 8 -
if not (x is None):❌ 冗余,不必要嵌套 - 注意:不要用
is not来判断值是否“不等于”,比如if x is not 5是错误逻辑,应改用if x != 5
实际例子帮你分辨
运行以下代码会更直观:
-
a = [1, 2, 3]; b = [1, 2, 3]; print(a == b, a is b)→True False -
c = d = [1, 2, 3]; print(c is d)→True(因为指向同一对象) -
x = None; print(x is None, x == None)→True True,但前者才是规范写法
以上就是Python身份运算符如何使用_is与isnot讲解【教程】的详细内容,更多请关注php中文网其它相关文章!
相关标签:
微信扫一扫打赏
支付宝扫一扫打赏
