in用于成员检测,判断元素是否在容器中;is用于身份比较,判断两个变量是否引用同一对象,值比较用==,None判断推荐is。

在 python 中,in 和 is 看起来都像关键字,但它们的作用完全不同,不能混淆。
in:成员检测运算符
in 用来检查某个元素是否存在于一个容器(如列表、字符串、字典、集合等)中,返回布尔值。
例如:
-
'a' in 'abc'→ True(字符 ‘a’ 在字符串 ‘abc’ 中) -
3 in [1, 2, 3]→ True(数字 3 在列表中) -
'name' in {'name': 'Alice'}→ True(键 ‘name’ 在字典中)
它的本质是“包含关系”的判断,适用于任何可迭代或支持成员检测的对象。
is:身份比较运算符
is 用来判断两个变量是否指向同一个对象(即内存地址相同),而不是值相等。
例如:
-
a = [1, 2, 3]; b = a; a is b→ True(a 和 b 是同一个列表对象) -
a = [1, 2, 3]; b = [1, 2, 3]; a is b→ False(虽然值一样,但是两个不同对象) -
5 is 5→ True(小整数有缓存,可能共享对象)
注意:is 不是比较值,而是比较身份。值相等用 ==,身份相同用 is。
常见误区
新手容易把 is 当成 == 用,比如:
总结:in 判断“有没有”,is 判断“是不是同一个东西”。理解清楚就能避免错误。


