闭坑指南 · Python#经典错误
is 与 ==
身份比较 vs 值比较,小整数缓存与 None。
is 与 ==
| 运算符 | 含义 |
|--------|------|
| == | 值是否相等(调用 __eq__) |
| is | 是否是同一个对象(同一内存地址) |
何时用 is
- 与
None比较:if x is None - 单例对象(谨慎)
不要用 is 比较字符串/列表内容
a is b 为真只说明碰巧同一对象,不能代替 ==。
小整数缓存
CPython 会缓存 -5 到 256 的整数,所以 256 is 256 常为真,257 不一定。不要依赖这个行为写业务逻辑。