是否有可能比较两个"实例"?我有一个变量和一个列表。变量的类型为"instance",列表中的项也具有相同的类型。当我将变量和列表中的相同项目进行比较时:
cities = [USA, Poland, England, GB, Italy]
variable = Italy
variable == cities[-1]
我收到了"False"作为输出。我百分之百肯定这两个元素是相同的。
提前感谢!
Python中有两种类型的对象。可变的,不变的。
不可变
- 状态无法更改
- 通常被认为是";基元";类型
int
、float
、string
、tuple
等
可突变
- 状态可以更新和更改
list
、dict
、set
、bytearray
,通过class
令牌创建的任何对象
根据您在说variable
时讨论的类型,这将影响运算符==
。不可变类型将始终根据实际值进行检查(例如,1 == 1
是True
(,其中可变类型根据对象的__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