身份运算符用于比较对象以确定它们是否共享相同的内存位置并且引用相同的数据类型(对象类型)。
Python提供了两种身份运算符,如下所示:
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)
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)
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 = "TutorialsPoint"
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" 和 "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”包含特定位置的 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
。