如何比较Python中的两个实例?
是否有可能比较两个“实例”?我有一个变量和一个列表。变量的类型为“实例”,列表中的项也具有相同的类型。当我将变量与列表中的同一项进行比较时:如何比较Python中的两个实例?,python,python-3.x,instance,instance-variables,Python,Python 3.x,Instance,Instance Variables,是否有可能比较两个“实例”?我有一个变量和一个列表。变量的类型为“实例”,列表中的项也具有相同的类型。当我将变量与列表中的同一项进行比较时: cities = [USA, Poland, England, GB, Italy] variable = Italy variable == cities[-1] 我收到“False”作为输出。我100%确信这两个元素是相同的 提前谢谢 Python中有两种类型的对象。可变的,不变的 不变的 无法更改状态 通常被认为是“原始”类型 int,floa
cities = [USA, Poland, England, GB, Italy]
variable = Italy
variable == cities[-1]
我收到“False”作为输出。我100%确信这两个元素是相同的
提前谢谢 Python中有两种类型的对象。可变的,不变的 不变的
- 无法更改状态
- 通常被认为是“原始”类型
,int
,float
,string
等tuple
- 状态可以更新和更改
,列表
,dict
,集合
,通过字节数组
标记创建的任何对象类
根据您在说
变量时讨论的类型,这将影响操作员=
。始终根据实际值检查不可变类型(例如,1==1
isTrue
),其中根据对象的方法检查可变类型(这会重载=
符号)
列出的所有可变类型(使用类初始化的新对象除外)都有一个内置的\uuuu eq\uuu
方法,当出现=
符号时使用该方法。假设您正在使用自己的对象,请以以下对象为例:
Obj类:
def uuu init uuu(self,integer):
self.integer=整数
打印(Obj(1)=Obj(1))#错误
请注意,尽管integer
对于每个Obj
都是相等的,但由于Obj
是一个可变类型,没有\uuuuuueq\uuuuu
方法,Python将根据对象在内存中的空间来检查对象是否相等,换句话说,就是True
,对象必须与您初始化的对象完全相同
Obj类:
def uuu init uuu(self,integer):
self.integer=整数
obj=obj(1)
打印(obj==obj)#正确
要手动重载==
符号,必须使用方法:
Obj类:
def uuu init uuu(self,integer):
self.integer=整数
定义(自身、其他):
#两个整数的比较。
返回self.integer==other.integer
打印(Obj(1)=Obj(1))#真
此处需要更多详细信息,变量是什么?列表的上下文是什么?您可能需要这样做。list
是一个已保存的名称空间,不要将其用于变量名。尝试执行“isinstance(variable,list)”并查看它是否返回True。@BobbyTrap只是一个示例,我知道:)如何为字符串实现它?字符串已经有一个内置的\uuueq\uu
方法。如果您在进行比较时收到False
,则表示它们不同<代码>“hello world”==“helloworld”
将返回False
。我之所以这样问,是因为我的问题与字符串有关。有什么解决方案吗?您必须以假定彼此相等的字符串实际上相等的方式格式化字符串(例如,将a
转换为a
,默认为小写或大写等)。事实是,如果Python告诉您两个字符串不相等,这意味着字符串是不相等的(“hello”==“hello”
产生False
,“héllo”==“hello”
产生False
)是的,但我的字符串是相同的,我确信这一点。问题的主要原因是“实例”类型,但正如您前面提到的,字符串已经有了eq,所以现在,Ikd如何解决它。