Tipo de error Unhashable type: set

El siguiente código tiene un error en la función U = set (p.enum ()), que es un error de tipo de tipo unsashable: ‘set’ en realidad si puede ver que el enum del método de clase está devolviendo ‘L’, que es la lista de conjuntos y U en la función debe ser un conjunto, así que, por favor, ¿puede ayudarme a resolver el problema o cómo puedo convertir la lista de conjuntos en conjuntos de conjuntos?

class pattern(object): def __init__(self,node,sets,cnt): self.node=node self.sets=sets self.cnt=cnt def enum(self): L=[] if self.cnt==1: L = self.node else: for i in self.sets: L=[] for j in self.node: if i!=j: L.append(set([i])|set([j])) return L #List of sets V=set([1,2,3,4]) U=set() cnt=1 for j in V: p=pattern(V,(U|set([j])),cnt) U=set(p.enum()) #type error Unhashable type:'set' print U cnt+=1 

Los elementos individuales que coloques en un conjunto no pueden ser mutables, porque si cambiaban, el hash efectivo cambiaría y, por lo tanto, la capacidad de verificar la inclusión se rompería.

En su lugar, debe colocar objetos inmutables en un conjunto, por ejemplo, frozenset s.

Si cambia la statement de retorno de su método de enum a …

 return [frozenset(i) for i in L] 

… entonces debería funcionar.

Este error se produce porque un conjunto solo puede contener tipos inmutables. O los conjuntos son mutables. Sin embargo existe el tipo de frozenset :

 In [4]: a, b = {1,2,3}, {2,3,4} In [5]: set([a,b]) --------------------------------------------------------------------------- TypeError Traceback (most recent call last)  in () ----> 1 set([a,b]) TypeError: unhashable type: 'set' In [6]: a, b = frozenset({1,2,3}), frozenset({2,3,4}) In [7]: set([a,b]) Out[7]: {frozenset({1, 2, 3}), frozenset({2, 3, 4})}