python set add 导致问题 TypeError: unhashable type: 'list'

转载:https://www.cnblogs.com/kaituorensheng/p/5694555.html

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


关于set

set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等

set用法

>>>x = set('runoob')
>>> y = set('google')
>>> x, y
(set(['b', 'r', 'u', 'o', 'n']), set(['e', 'o', 'g', 'l']))   # 重复的被删除
>>> x & y         # 交集
set(['o'])
>>> x | y         # 并集
set(['b', 'e', 'g', 'l', 'o', 'n', 'r', 'u'])
>>> x - y         # 差集
set(['r', 'b', 'u', 'n'])
>>>

猜你喜欢

转载自blog.csdn.net/nageaixiaodenanhai/article/details/79792865