>>> li = [2, [3, 4]]
>>> 3 in li
False
>>> {2, {3, 4}}
TypeError: unhashable type: 'set'
Run Code Online (Sandbox Code Playgroud)
为什么在Python(2.x和3.x)中没有实现嵌套(在数学中使用)?
Mar*_*ers 18
它已实现,但您需要使用hashable类型.frozenset()是那种类型.文档甚至告诉你:
要表示集合集,内部集合必须是
frozenset对象.
演示:
>>> {2, frozenset([3, 4])}
set([frozenset([3, 4]), 2])
Run Code Online (Sandbox Code Playgroud)
这是因为常规set()是可变的,这与用于集合(和字典)的数据结构的要求不相容; 这些需要稳定的对象,当根据其哈希值用作表中的键时可以重新定位.
文档再次:
的
set类型是可变的-内容可使用类似的方法来改变add()和remove().由于它是可变的,因此它没有哈希值,不能用作字典键或另一组的元素.该frozenset类型是不可变的和可散列的 - 其内容在创建后不能更改; 因此,它可以用作字典键或另一组的元素.