問題復現
>>> 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存儲,必須存儲不變的對象,例如字符串、數字、元組等。