首页 > 解决方案 > 如何比较 Python 中的两个实例?

问题描述

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

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

variable == cities[-1]

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

提前致谢!

标签: pythonpython-3.xinstanceinstance-variables

解决方案


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

不可变

  • 状态不能改变。
  • 通常被认为是“原始”类型。
  • int, float, string,tuple

可变的

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

取决于您所讨论的类型,当您说variable这将影响操作员时==。不可变类型将始终根据实际值(例如1 == 1is True)进行检查,而可变类型则根据对象的__eq__方法(重载==符号)进行检查。

列出的所有可变类型——除了用初始化的新对象class——都有一个内置__eq__方法,当==符号存在时使用。假设您使用的是自己的对象,例如:

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

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

请注意,尽管integereach 是相等的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

推荐阅读