python - 如何比较 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
is True
)进行检查,而可变类型则根据对象的__eq__
方法(重载==
符号)进行检查。
列出的所有可变类型——除了用初始化的新对象class
——都有一个内置__eq__
方法,当==
符号存在时使用。假设您使用的是自己的对象,例如:
class Obj:
def __init__(self, integer):
self.integer = integer
print(Obj(1) == Obj(1)) # False
请注意,尽管integer
each 是相等的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
推荐阅读
- c++ - 无法访问/设置空结构的值
- angular - Angular 4 中是否有类似 ajaxStart 和 ajaxstop 的东西?
- spring-boot - 如何暂停消费者在春季云流中消费消息
- javascript - 如何提取数组中特定条目的值?
- python - Python钱包列表功能
- mysql - 选择从出生日期起年龄在 35 - 50 之间的地方
- javascript - setTimeout 在 for 循环中的 Promise
- php - 相等的字符串在php上不相等
- ios - 如何使用 Inspector 在 Xcode 中缩放 3D 对象?
- mysql - MySql-5.1.40 全文搜索在 MyISAM 表中不起作用