2014-03-30 13:22 GMT+01:00 Marco Buttu <mbu...@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-
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a