Python 身份运算符

12 2025年6月 | 阅读6分钟

在 Python 中,身份运算符是用于比较两个对象内存位置的特殊运算符。它们不比较变量的值,而是检查两个变量是否引用内存中完全相同的对象

Python 提供了两个身份运算符

运算符描述
is检查两个变量是否引用内存中相同的对象
is not检查两个变量是否引用不同的对象

当需要判断两个变量是否指向同一个对象,而不仅仅是值相等时,这些运算符特别有用。

Python 的 'is' 运算符

Python 中的 'is' 运算符用于检查两个变量是否引用内存中的同一个对象

下面是 Python 'is' 运算符的一个简单示例

示例

立即执行

输出

True

说明

在上面的示例中,我们使用 'is' 运算符来检查 x 和 y 是否引用内存中完全相同的对象。

注意:Python 会重用小的整数对象(-5 到 256)以节省内存。因此,在此范围内的具有相同值的变量可能指向同一个对象。

现在让我们看另一个例子

示例

立即执行

输出

a is b: True
x is y: False
list1 == list2: True
list1 is list2: False
list1 is list3: True
s1 is s2: True
s1 == s3: True
s1 is s3: False
val is None: True
dict1 is dict2: False

说明

'is' 运算符检查两个变量是否指向内存中的同一个对象。对于小的数字和简单的字符串,Python 通常会重用同一个对象,因此它可能会返回 True。但对于较大的 数字、列表、字典或新创建的 字符串,即使值相同,它们通常也会被分开存储,因此返回 False。它也常用于检查某个值是否为 None,例如 val is None

Python 的 'is not' 运算符

Python 中的 'is not' 运算符用于检查两个变量是否不引用内存中的同一个对象

下面是 Python 'is not' 运算符的一个示例

示例

立即执行

输出

True

说明

在此示例中,我们使用 'is not' 运算符来检查两个变量是否指向同一个对象。

由于两个变量都引用了内存中的不同对象,因此输出返回 True

让我们看另一个例子

示例

立即执行

输出

a is not b: False
x is not y: True
list1 is not list2: True
list1 != list2: False
list1 is not list3: False
str1 is not str2: False
str1 is not str3: True
value is not None: False
car1 is not car2: True
car1 is not car3: False

说明

在 Python 中,表达式 x is not y 检查 x 和 y 是否不是内存中的同一个对象。如果它们是两个独立的对象,即使它们看起来相同或具有相同的值,它也会返回 True

注意:即使两个事物看起来相同,它们也可能仍然是不同的对象。

'is' 和 '==' 之间的区别

下表显示了'is''==' 之间的区别

运算符检查返回 (如果为 True)
==值相等对象的 contents/values 相同
is对象身份 (内存)两个变量指向同一个对象

让我们通过一个例子来理解两者的区别

示例

立即执行

输出

var_1 == var_2 => True
var_1 == var_3 => True

var_1 is var_2 => False
var_1 is var_3 => True

说明

在此示例中,我们可以清楚地看到 '==''is' 运算符之间的区别。

结论

在 Python 中,'is''is not' 运算符用于检查两个 变量是否指向内存中的同一个对象。它们不像 '==' 那样比较值。当你想要查看两个事物是否是完全相同的对象时使用 is,当你想要检查它们是否是不同的对象时使用 is not。这在检查 None 或处理可变数据(如 列表字典)时特别有用。

Python 身份运算符选择题

1. 下列哪个是 Python 中的身份运算符?

  1. ==
  2. is
  3. in
  4. !=
 

答案: b) is


2. Python 中的 'is' 运算符检查什么?

  1. 值的相等性
  2. 对象的类型
  3. 对象的身份 (内存位置)
  4. 元素在序列中的成员资格
 

答案: c) 对象的身份 (内存位置)


3. 以下代码的输出是什么?

  1. true
  2. False
  3. Error
 

答案: a) True


4. 下列代码的输出是什么?

  1. true
  2. False
  3. Error
 

答案: b) False


5. 下列哪个身份运算符在两个变量不引用同一个对象时返回 True?

  1. ==
  2. is
  3. is not
  4. !=
 

答案: c) is not