Python判斷物件是否相等及eq函式的講解

2022-10-04 17:57:11 字數 1903 閱讀 3874

摘要

python物件的標識

python物件標識就是python物件自身的要素,python物件主要有3要素:

物件相等的判斷

python中的物件是否相等有兩個層面,乙個層面是是否是同乙個物件,及在記憶體中是否共用乙個記憶體區域,用is判斷,另乙個是物件的值是否相等,用==判斷。

我目前用的最多的就是python物件的比較,即比較兩個pythowhkvrn物件是否相等,看個例子:

class student(object):

def __init__(self,name,age,***):

self.name = name

self.age = age

self.*** = ***

def __eq__(self, *args, **kwargs):

return object.__eq__(self, *args, **kwargs)

like = student("like",25,"male")

xue = student("xue",23,"female")

dong = student("like",25,"male")

print(like is xue) #false

print(like is dong) #false

print(like == dong) #false

這裡有兩個student類的例項化物件,like和xue很明顯是兩個不同的物件,他們的不同體現在所佔記憶體位址不同且物件的屬性也不同。

like和dong雖然屬性相同,但是is和==兩種判斷的結果也都為false,在實際情況中,我們大多都希望like和dong程式設計客棧屬性相同,就認為是同乙個物件,所以我們需要重寫類的eq方法:

class student(object):

def __init__(self,name,age,***):

self.name = name

self.age = age

self.*** = ***

def __eq__(swww.cppcns.comelf,other):

return self.__dict__ == other.__dict__

print(like == dong) #true

呼叫乙個物件的dict方法可以用字典的形式輸出其屬性列表,由於兩個物件的屬性相同,所以==運算為true。

自定義python物件相等的條件

當然在實際情況下,可以更靈活的定義兩個物件相等的條件,比如名字一樣就認為相等。

class student(object):

def __init__(self,name,age,***):

self.name = name

self.age = age

self.*** = ***

def __eq__(self,other):

return self.name == other.name

like = student(www.cppcns.com"like",25,"male")

dong = student("like",23,"female")

print(like == dong) #true

實際場景

在實際應用中,有乙個場景是處理物件是否在list裡,不在就加入。

like = student("like",25,"male")

dong = student("like",25,"male")

list1 =

list1.append(like)

if dong not in list1:

list1.append(dong)

print(程式設計客棧len(list1)) #1

list的in操作就是通過==來判斷是否在list中。

總結

Python 判斷物件是否相等及eq函式

python物件標識就是python物件自身的要素,python物件主要有3要素 python中的物件是否相等有兩個層面,乙個層面是是否是同乙個物件,及在記憶體中是否共用乙個記憶體區域,用is判斷,另乙個是物件的值是否相等,用 判斷。我目前用的最多的就是python物件的比較,即比較兩個python...

Set 判斷倆個物件是否相等

set判斷倆個物件相同不是使用 運算子,而是根據equals方法。也就是說,如果只要倆個物件用equals方法比較返回true,set就不會接受這個物件,反之,只要來個物件用equals方法返回false,set就會接受這個物件 甚至這倆個物件是同乙個物件,set也可以把他們當成倆個物件 hashs...

java 判斷2個物件是否相等

判斷2個物件是否相等,主要考察的是你對object類的2個方法equals和hashcode以及 的理解。先來說說equals 和 的區別 1.首先,一定要記住,當沒有重寫object的equals方法時,equals的作用和 相同都是用來判斷2個物件的位址是否相等。2.如果重寫了重寫object的...