所以我有几点经验:
>>>{2,3} - {2}
{3}
Run Code Online (Sandbox Code Playgroud)
这一个很完美.
但是,这个似乎不起作用:
>>> {{2,3},{4,3}} - {{4,3}}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
Run Code Online (Sandbox Code Playgroud)
我认为它应该工作,
因为我使用一组包含两个元素,{2,3}和{4,3}到减去一个元素{4,3}.
尽管如此,它无法奏效.为什么?
sets不可清洗; 不能成为集合的成员.frozenset改为使用:
>>> {frozenset({2,3}), frozenset({4,3})} - {frozenset({4,3})}
set([frozenset([2, 3])])
Run Code Online (Sandbox Code Playgroud)
集合的元素必须是可以清除的.要表示集合集,内部集合必须是冻结集合对象.如果未指定iterable,则返回新的空集.
如果一个对象具有一个在其生命周期内永远不会改变的哈希值(它需要一个
__hash__()方法),并且可以与其他对象进行比较(它需要一个方法),则该对象是可清除的__eq__().比较相等的可哈希对象必须具有相同的哈希值.Hashability使对象可用作字典键和set成员,因为这些数据结构在内部使用哈希值.
所有Python的不可变内置对象都是可清除的,而没有可变容器(例如列表或字典).默认情况下,作为用户定义类实例的对象是可清除的; 它们都比较不等(除了它们自己),它们的哈希值来自它们的id().