<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2014-03-30 13:22 GMT+01:00 Marco Buttu <span dir="ltr"><<a href="mailto:mbuttu@oa-cagliari.inaf.it" target="_blank">mbuttu@oa-cagliari.inaf.it</a>></span>:</div>

<div class="gmail_quote"><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Un'altra differenza rispetto alle liste e' che gli elementi di un set devono essere immutabili<br></blockquote><div><br></div><div>No. Devono essere hashabili. Sono due concetti legati ma ben distinti.</div><div>

<br></div><div>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.</div>

<div><br></div><div>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).</div>

<div><br></div><div>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.</div>

<div><br></div><div><br></div></div><div><br></div>-- <br> .<br>..: -enrico-
</div></div>