网淘巴来吧,欢迎您!

返回首页 微信
微信
手机版
手机版

Python frozenset集合

2021-05-16 新闻来源:网淘巴 围观:312
''

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

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

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

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

frozenset 的作用主要有两点:

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


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

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)

运行结果:

s = {'Python', 'C', frozenset({'Java', 'Shell'}), 'C++'}
Traceback (most recent call last):
  File "D:\程序设计\Python\frozenset.py", line 8, in <module>
    s.add(s_sub)
TypeError: unhashable type: 'set'

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

免责申明
一、网淘巴提供的资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱:jjq_hn@wtao8.com ,我们会在看到邮件的第一时间内为您处理。二、网友通过wtao8.com途径发表的一切信息,本站有权在本网站范围内引用、发布、转载用户在本站发布的内容。本站对于用户发布的内容所引发的版权、署名权的异议、纠纷不承担任何责任。传统媒体转载须事先与原作者和本站联系。提交者发言纯属个人行为,与本网站立场无关。
打赏

相关文章

关于已赞助未发注册码声明

目前有一位朋友已赞助了,但未将软件软件名称、注册名和注册码发到我的邮箱,请将信息发至我的邮箱,谢谢。