我是靠谱客的博主 虚幻人生,这篇文章主要介绍4.20 Python frozenset集合(set集合的不可变版本),现在分享给大家,希望可以做个参考。

set 集合是可变序列,程序可以改变序列中的元素;frozenset 集合是不可变序列,程序不能改变序列中的元素。set 集合中所有能改变集合本身的方法,比如 remove()、discard()、add() 等,frozenset 都不支持;set 集合中不改变集合本身的方法,fronzenset 都支持。

我们可以在交互式编程环境中输入dir(frozenset)来查看 frozenset 集合支持的方法:

复制代码
1
2
3
>>> dir(frozenset) ['copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']

frozenset 集合的这些方法和 set 集合中同名方法的功能是一样的。

两种情况下可以使用 fronzenset:

  • 当集合的元素不需要改变时,我们可以使用 fronzenset 替代 set,这样更加安全。
  • 有时候程序要求必须是不可变对象,这个时候也要使用 fronzenset 替代 set。比如,字典(dict)的键(key)就要求是不可变对象。

下面程序演示了 frozenset 的用法:

复制代码
1
2
3
4
5
6
7
8
9
10
s = {'Python', 'C', 'C++'} fs = frozenset(['Java', 'Shell']) s_sub = {'PHP', 'C#'} #向set集合中添加frozenset s.add(fs) print('s =', s) #向为set集合添加子set集合 s.add(s_sub) print('s =', s)

运行结果:

复制代码
1
2
3
4
5
6
s = {'Python', frozenset({'Java', 'Shell'}), 'C', 'C++'} Traceback (most recent call last): File "C:UsersshaobingDesktopdemo.py", line 11, in <module> s.add(s_sub) TypeError: unhashable type: 'set'

需要注意的是,set 集合本身的元素必须是不可变的, 所以 set 的元素不能是 set,只能是 frozenset。第 6 行代码向 set 中添加 frozenset 是没问题的,因为 frozenset 是不可变的;但是,第 10 行代码中尝试向 set 中添加子 set,这是不允许的,因为 set 是可变的。

最后

以上就是虚幻人生最近收集整理的关于4.20 Python frozenset集合(set集合的不可变版本)的全部内容,更多相关4.20内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部