5.14.3 Protocollo per la conversione automatica in oggetti immutabili

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.