python set add 导致问题 TypeError: unhashable type: 'list'
问题复现
>>> a = set() >>> b = set() >>> b.add(1) >>> a.add(b) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'set'
>>> c = list(b) >>> a.add(c) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
>>> tuple(b) (1,)
>>> a.add(b)
>>>
现象:往set对象里add列表、集合对象时,时提示他们是不可hash的,而对于tuple类型就可以。
原因:set里面的对象是hash存储(所以是无序的),对于python万物都是对象,如果存储一个list对象,而后改变了list对象,那set中刚才存储的值的hash就变了。
结论:set是hash存储,必须存储不变的对象,例如字符串、数字、元组等。