微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何比较 Python 中的两个实例? 不可变可变

如何解决如何比较 Python 中的两个实例? 不可变可变

是否有可能比较两个“实例”?我有一个变量和一个列表。变量的类型为“实例”,列表中的项目也具有相同的类型。当我将变量与列表中的相同项目进行比较时:

cities = [USA,Poland,England,GB,Italy]
variable = Italy

variable == cities[-1]

我收到了“假”作为输出。我 100% 确定这两个元素是相同的。

提前致谢!

解决方法

Python 中有两种类型的对象。可变的,不可变的。

不可变

  • 状态无法更改。
  • 通常被认为是“原始”类型。
  • intfloatstringtuple

可变

  • 状态可以更新和更改。
  • listdictsetbytearray,任何通过 class 令牌创建的对象。

根据您在说 variable 时所讨论的类型,这将影响运算符 ==。将始终根据实际值检查不可变类型(例如 1 == 1True),其中根据对象的 __eq__ 方法(重载 == 符号)检查可变类型.

列出的所有可变类型 - 除了用 class 初始化的新对象 - 都有内置的 __eq__ 方法,当出现 == 符号时会使用这些方法。假设您正在使用自己的对象,请以以下示例为例:

class Obj:
    def __init__(self,integer):
        self.integer = integer

print(Obj(1) == Obj(1)) # False

请注意,尽管 integer 对于每个 Obj 都是相等的,但由于 Obj 是一个没有 __eq__ 方法的可变类型,Python 将检查对象是否相等根据它们在内存中的空间相互关联 - 换句话说,对于 True,对象必须与您初始化的完全相同。

class Obj:
    def __init__(self,integer):
        self.integer = integer

obj = Obj(1)

print(obj == obj)  # True

要手动重载 == 符号,您必须使用 __eq__ 方法:

class Obj:
    def __init__(self,integer):
        self.integer = integer

    def __eq__(self,other):
        # Comparison of two integers.
        return self.integer == other.integer

print(Obj(1) == Obj(1))  # True

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。