当前位置:   article > 正文

Python frozenset集合(set集合的不可变版本)_frozenset 不可更新

frozenset 不可更新

frozenset 是 set 的不可变版本,因此 set 集合中所有能改变集合本身的方法(如 add、remove、discard、xxx_update 等),frozenset 都不支持;set 集合中不改变集合本身的方法,fronzenset 都支持。

在交互式解释器中输入 dir(frozenset) 命令来查看 frozenset 集合的全部方法,可以看到如下输出结果:

  1. >>> dir(frozenset)
  2. ['copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']

很明显,frozenset 的这些方法和 set 集合同名方法的功能完全相同。

frozenset 的作用主要有两点:

  1. 当集合元素不需要改变时,使用 frozenset 代替 set 更安全。
  2. 当某些 API 需要不可变对象时,必须用 frozenset 代替set。比如 dict 的 key 必须是不可变对象,因此只能用 frozenset;再比如 set 本身的集合元素必须是不可变的,因此 set 不能包含 set,set 只能包含 frozenset。


如下程序示范了在 set 中添加 frozenset:

  1. s = set()
  2. #创建 frozenset 不可变集合,使用 frozenset() 函数
  3. frozen_s = frozenset('Kotlin')
  4. # 为set集合添加frozenset
  5. s.add(frozen_s)
  6. print('s集合的元素:', s)
  7. sub_s = {'Python'}
  8. # 为set集合添加普通set集合,程序报错
  9. s.add(sub_s)

上面程序中第 4 行代码为 set 添加 frozenset,程序完全没有问题,这样 set 中就包括一个 frozenset 子集合;第 8 行代码试图向 set 中添加普通 set,程序会报出 TypeError 异常。运行上面代码,可以看到如下输出结果:

  1. s集合的元素: {frozenset({'t', 'o', 'i', 'K', 'l', 'n'})}
  2. Traceback (most recent call last):
  3. File "C:\Users\mengma\Desktop\1.py", line 8, in <module>
  4. s.add(sub_s)
  5. TypeError: unhashable type: 'set'

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/586542
推荐阅读
相关标签
  

闽ICP备14008679号