Me gustaría inicializar un diccionario de conjuntos (en Python 2.6) usando dict.fromkeys
, pero la estructura resultante se comporta de manera extraña. Más específicamente:Comportamiento no deseado de 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])}
Yo, obviamente, no quiero añadir 3 a todos los conjuntos, sólo para el conjunto que corresponde a x[5]
. Por supuesto, puedo evitar el problema inicializando x
sin fromkeys
, pero me gustaría entender lo que me falta aquí.
Son todos el mismo conjunto. Los conjuntos, listas, diccionarios y cualquier otro objeto son tipos de referencia, y cuando los asigna a otra variable, solo se copia la referencia, no el objeto real. 'fromkeys' debe usar la asignación para asociar el conjunto con cada clave, pero como puede ver, esto no copia el conjunto. No estoy seguro de cómo evitar esto, además de crear el diccionario de otra manera. –