You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中in关键字判断成员关系是校验标识还是相等性?

结论

in 关键字在列表、字典等容器中做元素存在性校验时,判断依据是相等性(即==运算符的逻辑),而非对象标识(is运算符的逻辑)。

验证方法(避开字符串驻留干扰)

你之前用字符串测试无法区分两种逻辑的差异,是因为CPython解释器默认会对字面量形式的短字符串做驻留(intern)处理:相同内容的字符串会复用同一个内存对象,导致is和==的返回结果一致,无法观测到区别。
使用自定义类的实例测试即可清晰验证逻辑:

class MyObj:
    def __init__(self, val):
        self.val = val
    
    def __eq__(self, other):
        # 自定义相等性逻辑:只要val属性相等就判定为相等
        if isinstance(other, MyObj):
            return self.val == other.val
        return False

# 实例化两个对象,内容相同但内存地址不同
obj_a = MyObj(5)
obj_b = MyObj(5)

print(obj_a is obj_b) # 输出 False,两个是不同的内存对象
print(obj_a == obj_b) # 输出 True,符合自定义的相等逻辑

# 列表存在性测试
test_list = [obj_a]
print(obj_b in test_list) # 输出 True,证明in用的是相等性判断
不同容器的in逻辑补充
  • 列表/元组:遍历容器内元素依次执行目标元素 == 当前元素判断,任意一次返回True则判定为存在
  • 集合/字典key判断:先校验hash(目标元素)和容器内对应元素的哈希值是否一致,再校验目标元素 == 对应元素,两者均符合才判定为存在,全程不会校验对象标识is

内容的提问来源于stack exchange,提问作者backstreetrover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:06:02