Python中in和is关键字详解和使用

在 Python 中,in 和 is 是两个常用但含义不同的关键字,初学者很容易混淆它们的用法。下面是关于它们的详细解释、注意事项及常见示例。


一、关键字 in:成员运算符

1. 功能

用于判断某个元素是否存在于序列(如列表、元组、字符串、集合、字典)中。

2. 基本语法

python 复制代码
element in container  # 返回 True 或 False

3. 示例

python 复制代码
# 字符串
'a' in 'apple'       # True

# 列表
3 in [1, 2, 3, 4]    # True

# 元组
'x' in ('x', 'y')    # True

# 字典(判断的是"键")
d = {'a': 1, 'b': 2}
'a' in d             # True
1 in d               # False

# 集合
5 in {1, 2, 3, 5}    # True

4. 注意事项

注意点 说明
字典中 in 判断的是键,不是值
in 实际调用的是容器的 __contains__() 方法
可以用于 for x in ... 的迭代语句中

5. 与 not in 结合使用

python 复制代码
if 'x' not in ['a', 'b', 'c']:
    print("x 不在列表中")

二、关键字 is:身份运算符

1. 功能

用于判断两个变量是否引用的是同一个对象(即内存地址是否相同)。

2. 基本语法

python 复制代码
a is b     # True if a 和 b 是同一个对象
a is not b # True if a 和 b 是不同对象

3. 示例

python 复制代码
a = [1, 2, 3]
b = a
c = [1, 2, 3]

print(a is b)  # True,引用同一对象
print(a is c)  # False,虽然值相等,但不是同一对象
print(a == c)  # True,值相等

4. 常见应用场景

  • 判断是否为 None:推荐使用 is 而不是 ==
python 复制代码
x = None
if x is None:
    print("x is None")
  • 类型判断不推荐使用 is
python 复制代码
# 不推荐:
type(x) is int

# 推荐:
isinstance(x, int)

三、in vs is 区别总结

特性 in is
类型 成员运算符 身份运算符
判断内容 某元素是否存在于容器中 两个变量是否指向同一个对象
返回值类型 True / False True / False
应用场景 序列判断、包含性检查 None 判断、引用对象判断

四、综合示例

python 复制代码
a = [1, 2, 3]
b = a
c = [1, 2, 3]

print(2 in a)       # True
print(b is a)       # True
print(c is a)       # False
print(c == a)       # True

d = {'k': 10}
print('k' in d)     # True(判断键)
print(10 in d)      # False(值不在键列表中)

x = None
print(x is None)    # 推荐写法
print(x == None)    # 也可以,但不推荐

五、常见错误与误区

错误写法 问题说明
if x == None: 不推荐;应该使用 x is None 更明确
if a is [1, 2, 3]: 错误;新列表对象地址不同,虽然值一样,但不是一个对象
if 3 is in lst: 错误语法;不能混用 is 与 in

六、推荐实践建议

  • 判断引用关系用 is,尤其是与 None 比较时。
  • 判断容器中是否包含元素,统一使用 in。
  • 判断两个变量值是否相等,用 ==,不是 is。
  • 永远不要使用 is 来判断数值、字符串等是否相等,除非你确定它们是否是同一对象。

相关推荐
小oo呆5 小时前
【学习心得】Python多线程
python
星夜离尘569 小时前
MATLAB 工程实验:不等间隔流量积分,先把缺口与覆盖率说清楚
开发语言·matlab·时间戳·数据质量·数值积分
happylifetree9 小时前
Python70:核心语法-函数进阶-案例2
python
irislinAmelia9 小时前
缺陷检测AI关键点在哪
人工智能·嵌入式硬件·1024程序员节
Ai-_Man9 小时前
Meta Muse还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·c#·1024程序员节
安托智造9 小时前
MBD:从二维图纸到三维模型的制造革命(下)
大数据·人工智能·制造·mbd
火山引擎开发者社区9 小时前
VeOps 深度调查:让 AI 排障从“能用”走向“可靠”
人工智能
梓豪csd9 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
王中阳Go9 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
BK贝壳9 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节