我可以使用可變對(duì)象作為python中的字典鍵。這是不允許的嗎?
具有方法的任何對(duì)象都可以是字典鍵。對(duì)于您編寫(xiě)的類(lèi),此方法默認(rèn)返回基于id(self)的值,并且如果相等性不是由這些類(lèi)的標(biāo)識(shí)決定的,則將它們用作鍵可能會(huì)讓您感到驚訝:
>>> class A(object):... def __eq__(self, other):... return True... >>> one, two = A(), A()>>> d = {one: 'one'}>>> one == twoTrue>>> d[one]’one’>>> d[two]Traceback (most recent call last): File '<stdin>', line 1, in <module>KeyError: <__main__.A object at 0xb718836c>>>> hash(set()) # sets cannot be dict keysTraceback (most recent call last): File '<stdin>', line 1, in <module>TypeError: unhashable type: ’set’
在2.6版中進(jìn)行了更改:__hash__現(xiàn)在可以設(shè)置為None,以將類(lèi)實(shí)例明確標(biāo)記為不可哈希。[]
class Unhashable(object): __hash__ = None解決方法
class A(object): x = 4i = A()d = {}d[i] = 2print di.x = 10print d
我以為只有不可變的對(duì)象才可以是字典鍵,但是上面的對(duì)象是可變的。
相關(guān)文章:
1. Python使用oslo.vmware管理ESXI虛擬機(jī)的示例參考2. javascript設(shè)計(jì)模式 ? 建造者模式原理與應(yīng)用實(shí)例分析3. Express 框架中使用 EJS 模板引擎并結(jié)合 silly-datetime 庫(kù)進(jìn)行日期格式化的實(shí)現(xiàn)方法4. Java構(gòu)建JDBC應(yīng)用程序的實(shí)例操作5. ThinkPHP5 通過(guò)ajax插入圖片并實(shí)時(shí)顯示(完整代碼)6. IntelliJ IDEA設(shè)置條件斷點(diǎn)的方法步驟7. 一篇文章帶你了解JavaScript-對(duì)象8. 淺談SpringMVC jsp前臺(tái)獲取參數(shù)的方式 EL表達(dá)式9. Spring應(yīng)用拋出NoUniqueBeanDefinitionException異常的解決方案10. python flask框架快速入門(mén)
