内置类型的文档set说:
class set([iterable])
Run Code Online (Sandbox Code Playgroud)
返回一个新的set或frozenset对象,其元素取自iterable.集合的元素必须是可以清除的.
没关系,但为什么这样做:
>>> l = range(10)
>>> s = set(l)
>>> s
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)
而这不是:
 >>> s.add([10])
    Traceback (most recent call last):
      File "<pyshell#7>", line 1, in <module>
        s.add([10])
    TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)
两者都是清单.在初始化过程中是否会发生一些魔法?
phi*_*hag 14
初始化集时,您需要提供必须每个都可以清除的值列表.
s = set()
s.add([10])
Run Code Online (Sandbox Code Playgroud)
是相同的
s = set([[10]])
Run Code Online (Sandbox Code Playgroud)
抛出你现在看到的同样错误.
In [13]: (2).__hash__
Out[13]: <method-wrapper '__hash__' of int object at 0x9f61d84>
In [14]: ([2]).__hash__ # nothing.
Run Code Online (Sandbox Code Playgroud)
问题是set需要其项是可哈希的,即实现__hash__魔术方法(据我所知,该方法用于在树中进行排序)。list并没有实现一个魔术方法,因此它不能在一组加入。
在这一行:
s.add([10])
Run Code Online (Sandbox Code Playgroud)
您正在尝试向集合添加列表,而不是列表的元素.如果您想要添加列表的元素,请使用update方法.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           4585 次  |  
        
|   最近记录:  |