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存储,必须存储不变的对象,例如字符串、数字、元组等。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM