Python身份运算符怎么用?is和is not有什么区别?

文章导读
上一个 测验 下一个 Python 身份运算符 身份运算符用于比较对象,以确定它们是否共享相同的内存地址并引用相同类型的对象(数据类型)。
📋 目录
  1. Python 身份运算符
  2. Python 'is' 运算符
  3. Python 'is not' 运算符
  4. Python 身份运算符示例及解释
A A

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。