Python frozenset集合 图片看不了?点击切换HTTP 返回上层
frozenset 是 set 的不可变版本,因此 set 集合中所有能改变集合本身的方法(如 add、remove、discard、xxx_update 等),frozenset 都不支持;set 集合中不改变集合本身的方法,fronzenset 都支持。
在交互式解释器中输入 dir(frozenset) 命令来查看 frozenset 集合的全部方法,可以看到如下输出结果:
frozenset 的作用主要有两点:
如下程序示范了在 set 中添加 frozenset:
在交互式解释器中输入 dir(frozenset) 命令来查看 frozenset 集合的全部方法,可以看到如下输出结果:
>>> dir(frozenset)
['copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']
frozenset 的作用主要有两点:
- 当集合元素不需要改变时,使用 frozenset 代替 set 更安全。
- 当某些 API 需要不可变对象时,必须用 frozenset 代替set。比如 dict 的 key 必须是不可变对象,因此只能用 frozenset;再比如 set 本身的集合元素必须是不可变的,因此 set 不能包含 set,set 只能包含 frozenset。
如下程序示范了在 set 中添加 frozenset:
s = set() #创建 frozenset 不可变集合,使用 frozenset() 函数 frozen_s = frozenset('Kotlin') # 为set集合添加frozenset s.add(frozen_s) print('s集合的元素:', s) sub_s = {'Python'} # 为set集合添加普通set集合,程序报错 s.add(sub_s)上面程序中第 4 行代码为 set 添加 frozenset,程序完全没有问题,这样 set 中就包括一个 frozenset 子集合;第 8 行代码试图向 set 中添加普通 set,程序会报出 TypeError 异常。运行上面代码,可以看到如下输出结果:
s集合的元素: {frozenset({'t', 'o', 'i', 'K', 'l', 'n'})}
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\1.py", line 8, in <module>
s.add(sub_s)
TypeError: unhashable type: 'set'