Python - 身份运算符
Python 身份运算符
身份运算符用于比较对象,以确定它们是否共享相同的内存地址并引用相同类型的对象(数据类型)。
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)
# 打印 a、b 和 c 的 ID
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
Python 'is not' 运算符
'is not' 运算符在两个操作数对象不共享相同内存地址或两个操作数不是相同对象时返回 True。
Python 身份 'is not' 运算符示例
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]
c = a
# 比较并打印返回值
print(a is not c)
print(a is not b)
# 打印 a、b 和 c 的 ID
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
Python 身份运算符示例及解释
示例 1
a=""
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
list 和 tuple 对象的行为有所不同,初看可能会觉得奇怪。在下面的示例中,两个列表 "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
list 或 tuple 只包含各个元素的内存地址,而不是元素本身。因此 "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
由于 "a" 和 "b" 位于不同的内存位置,即使两个列表包含相同的数字,"is" 运算符也会返回 False。