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) 更推荐:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~