第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

可哈希,不可更改

可哈希,不可更改

慕哥6287543 2019-12-13 09:57:27
從最近的一個(gè)SO問(wèn)題(請(qǐng)參閱在python中創(chuàng)建由列表建立索引的字典)中,我意識(shí)到我可能對(duì)python中可哈希和不可變對(duì)象的含義有錯(cuò)誤的理解。在實(shí)踐中,hashable是什么意思?可哈希和不可修改之間有什么關(guān)系?是否存在可哈希的可變對(duì)象或不可哈希的不可變對(duì)象?
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

散列是將大量數(shù)據(jù)以可重復(fù)的方式轉(zhuǎn)換為少量(通常是單個(gè)整數(shù))的過(guò)程,以便可以在表中以固定時(shí)間(O(1))查找數(shù)據(jù),這對(duì)于高性能很重要。算法和數(shù)據(jù)結(jié)構(gòu)。


不變性是一個(gè)想法,即對(duì)象創(chuàng)建后將不會(huì)以某種重要方式更改,尤其是可能以任何方式更改該對(duì)象的哈希值的方式。


這兩個(gè)想法是相關(guān)的,因?yàn)橛米鞴fI的對(duì)象通常必須是不可變的,因此它們的哈希值不會(huì)改變。如果允許更改,則該對(duì)象在諸如哈希表之類(lèi)的數(shù)據(jù)結(jié)構(gòu)中的位置將發(fā)生變化,從而破壞了哈希效率的整個(gè)目的。


要真正理解這個(gè)想法,您應(yīng)該嘗試使用C / C ++之HashMap類(lèi)的語(yǔ)言來(lái)實(shí)現(xiàn)自己的哈希表,或者閱讀該類(lèi)的Java實(shí)現(xiàn)。


查看完整回答
反對(duì) 回復(fù) 2019-12-13
?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊

是否存在可哈希的可變對(duì)象或不可哈希的不可變對(duì)象?

在Python中,元組是不可變的,但僅當(dāng)其所有元素都是可哈希的時(shí)才可哈希。


>>> tt = (1, 2, (30, 40))

>>> hash(tt)

8027212646858338501

>>> tl = (1, 2, [30, 40])

>>> hash(tl)

TypeError: unhashable type: 'list'

哈希類(lèi)型


原子不可變類(lèi)型都是可哈希的,例如str,字節(jié),數(shù)字類(lèi)型

凍結(jié)集始終是可哈希的(根據(jù)定義,其元素必須可哈希)

元組僅在其所有元素都可哈希的情況下才可哈希

默認(rèn)情況下,用戶定義類(lèi)型是可哈希的,因?yàn)樗鼈兊墓V凳瞧鋓d()


查看完整回答
反對(duì) 回復(fù) 2019-12-13
?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊

從Python詞匯表:


如果對(duì)象的哈希值在其生命周期內(nèi)始終不變(需要一個(gè)__hash__()方法),并且可以與其他對(duì)象進(jìn)行比較(需要一個(gè)__eq__()or __cmp__()方法),則該對(duì)象是可哈希的。比較相等的可哈希對(duì)象必須具有相同的哈希值。


散列性使對(duì)象可用作字典鍵和set成員,因?yàn)檫@些數(shù)據(jù)結(jié)構(gòu)在內(nèi)部使用散列值。


Python的所有不可變內(nèi)置對(duì)象都是可哈希的,而沒(méi)有可變?nèi)萜鳎ɡ缌斜砘蜃值洌┦强晒5?。作為用戶定義類(lèi)實(shí)例的對(duì)象默認(rèn)情況下可哈?;?;它們都比較不相等,并且其哈希值是其id()。


字典和集合必須使用散列以在散列表中進(jìn)行有效查找;散列值必須是不可變的,因?yàn)楦纳⒘袝?huì)弄亂數(shù)據(jù)結(jié)構(gòu)并導(dǎo)致dict或set失敗。使哈希值不可變的最簡(jiǎn)單方法是使整個(gè)對(duì)象不可變,這就是為什么經(jīng)常將兩者一起提到的原因。


盡管內(nèi)置的可變對(duì)象都不是可哈希的,但可以使用不可變的哈希值來(lái)創(chuàng)建可變對(duì)象。通常僅對(duì)象的一部分代表其身份,而對(duì)象的其余部分包含可以自由更改的屬性。只要哈希值和比較函數(shù)基于身份而不是可變屬性,并且身份永不更改,就可以滿足要求。


查看完整回答
反對(duì) 回復(fù) 2019-12-13
  • 3 回答
  • 0 關(guān)注
  • 713 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)