我可以使用可變對象作為python中的字典鍵。這是不允許的嗎?
具有方法的任何對象都可以是字典鍵。對于您編寫的類,此方法默認返回基于id(self)的值,并且如果相等性不是由這些類的標識決定的,則將它們用作鍵可能會讓您感到驚訝:
>>> 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版中進行了更改:__hash__現(xiàn)在可以設(shè)置為None,以將類實例明確標記為不可哈希。[]
class Unhashable(object): __hash__ = None解決方法
class A(object): x = 4i = A()d = {}d[i] = 2print di.x = 10print d
我以為只有不可變的對象才可以是字典鍵,但是上面的對象是可變的。
相關(guān)文章:
1. Python獲取抖音關(guān)注列表封號賬號的實現(xiàn)代碼2. Warning: require(): open_basedir restriction in effect,目錄配置open_basedir報錯問題分析3. php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究4. 解決Python 進程池Pool中一些坑5. php測試程序運行速度和頁面執(zhí)行速度的代碼6. Python如何讀寫CSV文件7. 三個不常見的 HTML5 實用新特性簡介8. ajax請求添加自定義header參數(shù)代碼9. python利用os模塊編寫文件復制功能——copy()函數(shù)用法10. 無線標記語言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)第1/2頁
