vorrei inizializzare un dizionario di insiemi (in Python 2.6) utilizzando dict.fromkeys
, ma la struttura risultante comporta in modo strano. Più in particolare:comportamento indesiderato da dict.fromkeys
>>>> x = {}.fromkeys(range(10), set([]))
>>>> x
{0: set([]), 1: set([]), 2: set([]), 3: set([]), 4: set([]), 5: set([]), 6: set([]), 7: set([]), 8: set([]), 9: set([])}
>>>> x[5].add(3)
>>>> x
{0: set([3]), 1: set([3]), 2: set([3]), 3: set([3]), 4: set([3]), 5: set([3]), 6: set([3]), 7: set([3]), 8: set([3]), 9: set([3])}
Io, ovviamente, non voglio aggiungere 3 a tutti i set, solo per il set che corrisponde a x[5]
. Naturalmente, posso evitare il problema inizializzazione x
senza fromkeys
, ma mi piacerebbe capire che cosa mi manca qui.
Sono tutti lo stesso set. Insiemi, elenchi, dizionari e qualsiasi altro oggetto sono tipi di riferimento e quando li si assegna a un'altra variabile, viene copiato solo il riferimento, non l'oggetto reale. 'Fromkeys' deve utilizzare l'assegnazione per associare l'insieme a ciascun tasto, ma come puoi vedere, questo non copia il set. Non sono sicuro di come aggirare questo, oltre a creare il dizionario in un modo diverso. –