真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中兩個對象為什么相等?原理是什么?

本篇文章為大家展示了Python中兩個對象為什么相等?原理是什么?代碼簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

從策劃到設(shè)計制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁設(shè)計、主機域名、網(wǎng)絡(luò)空間、網(wǎng)絡(luò)營銷、VI設(shè)計、 網(wǎng)站改版、漏洞修補等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。

大部分的python程序員平時編程的時候,很少關(guān)心兩個對象為什么相等,因為教程和經(jīng)驗來說,他們就應(yīng)該相等,比如1==1就應(yīng)該返回True,可是當(dāng)我們想要定義自己的對象或者修改默認(rèn)的對象行為時,通常會因為不了解原理而導(dǎo)致各種奇奇怪怪的錯誤。

兩個對象如何相等

??兩個對象如何才能相等要比我們想象的復(fù)雜很多,但核心的方法是重寫eq方法,這個方法返回True,則表示兩個對象相等,否則,就不相等。相反的,如果兩個對象不相等,則重寫ne方法。

??默認(rèn)情況下,如果你沒有實現(xiàn)這個方法,則使用父類(object)的方法。父類的方法比較是的兩個對象的ID(可以通過id方法獲取對象ID),也就是說,如果對象的ID相等,則兩個對象也就相等。因此,我們可以得知,默認(rèn)情況下,對象只和自己相等。例如:

>>> class A(object):
...     pass
...
>>>
>>> a = A()
>>> b = A()
>>> a == a
True
>>> a == b
False
>>> id(a)
4343310992
>>> id(b)
4343310928

??Python2程序員經(jīng)常犯的一個錯誤是,只重寫了eq方法,而沒有重寫ne方法,導(dǎo)致不可預(yù)計的錯誤。而Python3會自動重寫ne方法,如果你沒有重寫的話。

對象的Hash方法

??Python里可Hash的對象,都有一個數(shù)字ID代表了它在python里的值,這個ID是由對象的hash方法返回的。因此,如果想讓一個對象可Hash,那必須實現(xiàn)hash方法和之前提到的eq方法。和對象相等一樣,默認(rèn)情況下,對象的hash方法繼承自O(shè)bject對象,而Object對象的hash方法只計算對象ID,因此兩個對象始終擁有兩個不一樣的hash id,不管他們是多么相似。

??當(dāng)我們把一個不可Hash的對象加入到set或者dict時,會發(fā)生什么了?

>>> set().add({})
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unhashable type: 'dict'
unhashable type: 'dict'

原因是set()和dict()使用對象的hash值作為內(nèi)部索引,以便能快速索引到指定對象。因此,同一個對象返回相同的hash id就很重要了。

上述內(nèi)容就是Python中兩個對象為什么相等?原理是什么?,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站名稱:Python中兩個對象為什么相等?原理是什么?
分享鏈接:http://weahome.cn/article/pdogep.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部