[Python] Differenze tra liste e insiemi (era: Re: or)

enrico franchi enrico.franchi a gmail.com
Dom 30 Mar 2014 23:18:41 CEST


2014-03-30 13:22 GMT+01:00 Marco Buttu <mbuttu a oa-cagliari.inaf.it>:

Un'altra differenza rispetto alle liste e' che gli elementi di un set
> devono essere immutabili
>

No. Devono essere hashabili. Sono due concetti legati ma ben distinti.

Per esempio un normale oggetto definito da un utente e' hashabile
(essenzialmente il suo hash e' la sua identita') ma non e' immutabile. E lo
puoi ficcare dentro un set. Il requirement e' solo quello. Dopo di che,
ovviamente si hanno una serie di comportamenti non voluti e bislacchi. Il
gioco e' che ha l'uguaglianza definita in termini di identita' e quindi si
bypassa il classico problema di mettere un oggetto mutabile in un hash (in
quanto la parte da cui dipende l'hash e' chiaramente automaticamente
immutabile), pero' ovviamente si ha qualcosa di piuttosto sorprendente.

Ovviamente, se implementi fino in fondo un oggetto, con un uguaglianza
demantica (e un __hash__ che rispetti le specifiche) hai un oggetto che non
puoi piu' ficcare dentro un set (o usare come chiave in un dizionario).

Puoi anche costruire un oggetto immutabile che non sia hashabile. Devi
farlo un pochetto apposta, visto che ha tutti i requirement per una buona
definizione di __eq__ e di __hash__, ma di per se puoi farlo.



-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20140330/1f670a17/attachment.html>


Maggiori informazioni sulla lista Python