Python 中有哪些不同的身份运算符类型?
在 Python 中,除了基本的算术运算符和比较运算符之外,还有一种非常重要的运算符,那就是身份运算符。与比较运算符不同,身份运算符是用于比较两个对象的状态而非值,是判断两个变量所引用的对象是否为同一对象的工具。Python 中有三种不同的身份运算符: is
、is not
,以及 id()
函数。下面将对这三种类型分别进行说明:
阅读更多:Python 教程
is
身份运算符
is
身份运算符被用于测试两个变量是否引用自同一个对象(内存地址相同)。当两个变量绑定在同一对象上时返回 True,否则返回 False。
以下是一个简单的例子,展示如何使用 is
运算符判断两个变量是否引用同一对象:
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a is b) # True
print(a is c) # False
在上面的代码中,我们定义了三个列表变量 a
、b
和 c
,其中 a
和 b
绑定到同一个列表 [1, 2, 3]
上,而 c
绑定到一个新的、与 a
不同的列表 [1, 2, 3]
上。在第二个 print()
语句中,我们使用 is
运算符判断 a
和 c
是否指向同一对象,由于它们实际上引用两个不同的列表对象,所以输出结果是 False。
is not
身份运算符
和 is
身份运算符相反,is not
身份运算符用于测试两个变量是否引用不同的对象。当两个变量绑定在不同的对象上时返回 True,否则返回 False。以上面的例子为例,在第二个 print()
语句中如果使用 is not
身份运算符,可以输出相反的结果:
print(a is not c) # True
这是因为 a
和 c
绑定到不同的对象上,所以 a is not c
的结果为 True。注意,这里的 is not
是一个整体的运算符,不能把它分开使用。
id()
函数
id()
函数是一个内置函数,它返回一个对象的唯一标识符(或称内存地址)。这个标识符是一个整数,通常可以作为一个对象的唯一身份证明。在 Python 中,每个对象在创建时都会被分配一个唯一的标识符,直到对象被销毁时才会释放。
下面是一个使用 id()
函数和身份运算符的例子:
x = [1, 2, 3]
y = x
z = [1, 2, 3]
print(id(x))
print(id(y))
print(id(z))
print(x is y)
print(x is z)
在上面的代码中,我们定义了三个列表变量 x
、y
和 z
,其中 x
和 y
绑定到同一个列表 [1, 2, 3]
上,而 z
绑定到一个新的列表 [1, 2, 3]
上。我们通过 id()
函数分别打印出 x
、y
和 z
的内存地址,然后使用 is
运算符比较 x
和 y
、x
和 z
是否引用了同一个对象。
输出结果如下:
139800852734080
139800852734080
139800134057312
True
False
根据输出结果,可以看出,x
和 y
引用了同一个列表对象,它们的内存地址相同;而 x
和 z
引用了不同的列表对象,它们的内存地址不同。这进一步说明了身份运算符的作用,以及 id()
函数如何获取对象的唯一标识符。
结论
Python 中的身份运算符是用来比较两个对象的状态而非值,主要用于判断两个变量是否引用同一对象。is
身份运算符用于测试两个变量是否引用自同一个对象,is not
身份运算符用于测试两个变量是否引用不同的对象,而 id()
函数用于获取一个对象的唯一标识符。当我们需要比较两个变量是否引用同一个对象时,可以使用 is
运算符,当我们需要比较两个变量是否引用不同的对象时,可以使用 is not
运算符;而如果需要获取一个对象的唯一标识符时,可以使用 id()
函数。