python - type - È sicuro usare il set congelato come tasto Dict?



python 3 isdigit (2)

Ovviamente funziona, ma ci sono casi in cui due insiemi di elementi uguali si verificano per aggiungere due voci in Dict? Credo di aver avuto questa condizione prima e ho cambiato il mio codice da frozenset(...) a tuple(sorted(frozenset(...))) . Può qualcuno che sa come l'implementazione di Dict e frozenset conferma se è necessario o no?

https://ffff65535.com


Secondo i documenti, Frozenset è lavabile perché è immutabile. Ciò implicherebbe che possa essere usato come chiave per un dettato, perché il prerequisito per una chiave è che è lavabile.

Dai documenti di FrozenSet

Il tipo frozenset è immutabile e lavabile: il suo contenuto non può essere modificato dopo la sua creazione; può quindi essere usato come chiave del dizionario o come elemento di un altro set.

E in modo ridondante, dai documenti del dizionario :

... chiavi, che possono essere di qualsiasi tipo immutabile

Per chiarire, un insieme (per definizione), congelato o meno, non conserva l'ordine. Sono archiviati internamente con ordine non preso in considerazione e con elementi duplicati rimossi, quindi due insiemi creati in ordini diversi sarebbero chiavi equivalenti in un dizionario - sono gli stessi.

>>> frozenset([1,2,2,3,3]) == frozenset([3,2,1,1,1])
True

e allo stesso modo,

>>> d = {}
>>> d[frozenset([1,1,2,3])] = 'hello'
>>> d[frozenset([1,2,3,3])]
'hello'
>>> d[frozenset([3,3,3,2,1,1,1])]
'hello'
>>> d[frozenset([2,1,3])]
'hello'

dai documenti ufficiali

Il tipo frozenset è immutabile e lavabile: il suo contenuto non può essere modificato dopo la sua creazione; può quindi essere usato come chiave del dizionario o come elemento di un altro set.

(L'accento è mio)





frozenset