如何解决如何比较 Python 中的两个实例? 不可变可变
是否有可能比较两个“实例”?我有一个变量和一个列表。变量的类型为“实例”,列表中的项目也具有相同的类型。当我将变量与列表中的相同项目进行比较时:
cities = [USA,Poland,England,GB,Italy]
variable = Italy
variable == cities[-1]
我收到了“假”作为输出。我 100% 确定这两个元素是相同的。
提前致谢!
解决方法
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。