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() 函数。
极客笔记