Così liste sono nel calcolo dell'hash:Cosa rende le liste inattaccabili?
>>> { [1,2]:3 }
TypeError: unhashable type: 'list'
Il seguente page dà una spiegazione:
Una lista è un tipo mutabile, e non può essere utilizzato come una chiave in un dizionario (potrebbe cambiare in -place che rende la chiave non più localizzabile nella tabella di hash interna del dizionario).
Capisco perché non è desiderabile utilizzare oggetti mutabili come tasti del dizionario. Tuttavia, Python solleva la stessa eccezione anche quando sto semplicemente cercando di hash un elenco (indipendentemente dalla creazione dizionario)
>>> hash([1,2])
TypeError: unhashable type: 'list'
fa Python fare questo come una garanzia che i tipi mutabili non saranno mai utilizzati come chiavi di dizionario? O c'è un'altra ragione che rende impossibile l'hash degli oggetti mutabili, indipendentemente da come prevedo di usarli?
'hash()' chiama semplicemente il metodo '__hash__' dell'oggetto, e questo è esattamente ciò che fanno i dicts. –
Cosa * fai * hai intenzione di fare con l'hash? La motivazione è che l'hash di un oggetto non dovrebbe cambiare, e gli oggetti uguali dovrebbero generalmente avere lo stesso hash. – geoffspear