Gli insiemi possono contenere soltanto elementi immutabili. Per comodit�, gli oggetti Set mutabili vengono automaticamente copiati in ImmutableSet prima di essere inseriti come elementi di un insieme.
Il meccanismo � quello di aggiungere sempre un elemento hashable o, se non � hashable, si controlla se possieda un metodo __as_immutable__() che restituisca un oggetto immutabile equivalente.
Poich� gli oggetti Set possiedono un metodo __as_immutable__() che restituisce un'istanza di ImmutableSet, � possibile costruire insiemi di insiemi.
Un meccanismo simile viene richiesto dai metodi __contains__() e remove() che richiedono di applicare la funzione di hash su un elemento per controllare se � presente in un insieme. Questi metodi controllano se � possibile applicare la funzione di hash su un elemento, se non � possibile, controllano la presenza del metodo __as_temporarily_immutable__() il quale restituisce l'elemento incapsulato in una classe che fornisce metodi temporanei __hash__(), __eq__() e __ne__().
Questo metodo alternativo risparmia la necessit� di costruire una copia separata dell'oggetto mutabile originale.
Gli oggetti Set implementano il metodo __as_temporarily_immutable__() il quale restituisce l'oggetto Set incapsulato in una nuova classe _TemporarilyImmutableSet.
I due meccanismi per aggiungere la possibilit� di calcolare il valore di hash in genere sono invisibili all'utente; tuttavia possono sorgere dei conflitti negli ambienti multi-thread in cui un thread pu� modificare un insieme mentre un altro lo ha temporaneamente incapsulato in _TemporarilyImmutableSet. In altre parole gli insiemi composti da insiemi mutabili non sono sicuri per i thread.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.