-1

我试图理解字符串比较,因为我经历了整数比较或字符比较,其中 python 比较内存中对象的 id。

如果是,那么句子比较的方式是否相同,然后下面的结果对象ID不同但结果为True

a = "The Security Challenges Posed By 'Megxit'"
b = "The Security Challenges Posed By 'Megxit'"

print(id(a))
print(id(b))
print(a == b)
140133147022320
140133147021936
True
4

3 回答 3

3

==用于相等比较(不是身份比较)。要比较身份(即 ID),您可以使用is

a = "The Security Challenges Posed By 'Megxit'"
b = "The Security Challenges Posed By 'Megxit'"

print(a == b) # True
print(a is b) # False
于 2020-03-10T11:00:23.437 回答
1

对象 ID 是该对象在其生命周期内的唯一整数。这也是对象在内存中的地址。当您比较 a 和 b 时,您正在比较 a 的内容是否等于 b。在您的情况下返回True。

比较对象 ID 总是会给您一个 False,因为它们在每个对象的生命周期内都是唯一的。

您可以使用 'is' 比较 ID

print(a is b)

或比较 id()s

print(id(a) == id(b))
于 2020-03-10T11:03:17.687 回答
1

在 python 中有两种类型的相等 -==is.

is就像您期望比较工作一样 -True如果两个项目具有相同的 id,它会返回。a is b和之间没有区别id(a) == id(b)。两个对象只有在它们实际上是同一个对象时才具有相同的 id - 这意味着它们在内存中的同一个位置,并且aandb只是对同一个对象的两个引用。

当您创建两个相同的字符串时,python 可能能够理解它们是相同的字符串,只需创建一次并为您提供对同一字符串的两个引用 - 这不是问题,因为字符串是不可变的。然而,在许多情况下,在你的情况下,即使两个对象相同,python 也会创建两个单独的实例。在这种情况下,它们的 id 不会相同,但它们的内容会 - 这就是==目的。

==仅当对象的内容相同时才返回True(您可以通过实现该__eq__方法来覆盖它在类中的行为方式)。这就是您通常要使用 的原因==,除非您要找出两个变量是否实际上指向同一事物,在这种情况下使用isid(a) == id(b).

于 2020-03-10T11:04:03.347 回答