【问题标题】:python objects are equal with different id'spython 对象与不同的 id 相等
【发布时间】:2020-06-22 06:15:03
【问题描述】:

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

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

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

【问题讨论】:

标签: python


【解决方案1】:

== 用于平等比较(不是身份比较)。要比较身份(即 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

【讨论】:

    【解决方案2】:

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

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

    您可以使用 'is' 比较 ID

    print(a is b)
    

    或者比较id()s

    print(id(a) == id(b))
    

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 2018-12-06
        • 1970-01-01
        • 2019-12-19
        • 1970-01-01
        • 2018-01-17
        相关资源
        最近更新 更多