Python 身份运算符
Python 身份运算符(Python Identity Operators)比较对象以确定它们是否共享相同的内存并引用相同的对象类型 (数据类型)。
Python 提供了两个身份运算符;我们列出了它们如下:
- 'is' 运算符
- 'is not' 运算符
Python 'is' 运算符
如果两个操作数对象共享相同的内存位置,则 'is' 运算符的计算结果为 True。对象的内存位置可以通过 “id()” 函数获取。如果两个变量的 “id()” 相同,则 “is” 运算符返回 True。
Python 'is' 身份 运算符示例
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]
c = a
# 比较和打印返回值
print(a is c)
print(a is b)
# Printing IDs of a, b, and c
print("id(a) : ", id(a))
print("id(b) : ", id(b))
print("id(c) : ", id(c))
它将产生以下输出 -
True
False
id(a) : 140114091859456
id(b) : 140114091906944
id(c) : 140114091859456
False
id(a) : 140114091859456
id(b) : 140114091906944
id(c) : 140114091859456
Python 'is not' 运算符
如果两个操作数对象不共享相同的内存位置或两个操作数不是相同的对象,则 'is not' 运算符的计算结果为 True。
Python 'is not' 身份运算符示例
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]
c = a
# Comparing and printing return values
print(a is not c)
print(a is not b)
# Printing IDs of a, b, and c
print("id(a) : ", id(a))
print("id(b) : ", id(b))
print("id(c) : ", id(c))
它将产生以下输出 -
False
True
id(a) : 140559927442176
id(b) : 140559925598080
id(c) : 140559927442176
True
id(a) : 140559927442176
id(b) : 140559925598080
id(c) : 140559927442176
Python 身份运算符示例及说明
示例 1
a="TuqikepualsPnt"
b=a
print ("id(a), id(b):", id(a), id(b))
print ("a is b:", a is b)
print ("b is not a:", b is not a)
它将产生以下输出 -
id(a), id(b): 2739311598832 2739311598832
a is b: True
b is not a: False
a is b: True
b is not a: False
list 和 Tuples 对象的行为不同,乍一看可能看起来很奇怪。在以下示例中,两个列表 “a” 和 “b” 包含相同的项。但是他们的 id() 不同。
示例 2
a=[1,2,3]
b=[1,2,3]
print ("id(a), id(b):", id(a), id(b))
print ("a is b:", a is b)
print ("b is not a:", b is not a)
它将产生以下输出 -
id(a), id(b): 1552612704640 1552567805568
a is b: False
b is not a: True
a is b: False
b is not a: True
list 或 Tuples 仅包含单个项目的内存位置,而不包含项目本身。因此,“a” 包含某个位置的 10、20 和 30 个整数对象的地址,这可能与 “b” 的地址不同。
示例 3
print (id(a[0]), id(a[1]), id(a[2]))
print (id(b[0]), id(b[1]), id(b[2]))
它将产生以下输出 -
140734682034984 140734682035016 140734682035048
140734682034984 140734682035016 140734682035048
140734682034984 140734682035016 140734682035048
由于 “a” 和 “b” 的两个位置不同,因此即使两个列表包含相同的数字,“is” 运算符也会返回 False。