==
:值比较==
用于比较两个对象的值是否相等。也就是说,它检查的是两个对象内容是否一样,而不关心它们是否是同一个对象。
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # 输出 True,因为 a 和 b 的内容是一样的
在这个例子中,a
和 b
都是列表,它们的内容是相同的,所以 a == b
返回 True
。尽管 a
和 b
是两个不同的对象,但它们的值相同,所以 ==
认为它们是相等的。
is
:身份比较is
用于比较两个对象是否是同一个对象。也就是说,它检查的是两个变量是否引用的是内存中同一个对象,而不是它们的内容是否相同。
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a is b) # 输出 False,因为 a 和 b 是两个不同的对象
print(a is c) # 输出 True,因为 c 引用了 a,二者是同一个对象
在这个例子中,a
和 b
的内容虽然相同,但它们在内存中是两个不同的对象,所以 a is b
返回 False
。而 c
引用了 a
,它们指向同一个对象,所以 a is c
返回 True
。
==
比较的是两个对象的值,即内容是否相同。is
比较的是两个对象的身份,即是否是同一个对象。x = "hello"
y = "hello"
print(x == y) # 输出 True,因为 x 和 y 的内容是一样的
print(x is y) # 通常输出 True,因为 Python 对小的字符串做了内存优化,x 和 y 实际上是同一个对象
z = "hello world!"
w = "hello world!"
print(z == w) # 输出 True,因为 z 和 w 的内容是一样的
print(z is w) # 通常输出 False,因为较长的字符串不会自动优化为同一个对象
在这个字符串的例子中,短字符串可能会因为Python的内存优化而指向同一个对象,所以 is
也会返回 True
。但是对于较长的字符串,通常它们是不同的对象,is
会返回 False
。