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

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

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

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

两种情况下可以使用 fronzenset:

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

下面程序演示了 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', frozenset({'Java', 'Shell'}), 'C', 'C++'}
Traceback (most recent call last):File "C:\Users\shaobing\Desktop\demo.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集合的不可变版本)相关推荐

  1. [Python] Python数据类型(三)集合类型之set集合和frozenset集合

    1.集合基本概念 集合是0-n个对象引用的无序组合,集合中存储的元素不可重复,因此这些对象引用的引用的对象必须是可哈希运算的 . 1.python中提供了两种内置的集合类型:可变的set类型和固定的f ...

  2. python中的集合set类型是可变的吗_[Python] Python数据类型(三)集合类型之set集合和frozenset集合...

    1.集合基本概念 集合是0-n个对象引用的无序组合,集合中存储的元素不可重复,因此这些对象引用的引用的对象必须是可哈希运算的 .  1.python中提供了两种内置的集合类型:可变的set类型和固定的 ...

  3. Python frozenset 集合 - Python零基础入门教程

    目录 一.Python frozenset 集合语法 二.Python frozenset 集合使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> P ...

  4. Python frozenset集合(set集合的不可变版本)

    Python frozenset集合(set集合的不可变版本) set 集合是可变序列,程序可以改变序列中的元素:frozenset 集合是不可变序列,程序不能改变序列中的元素.set 集合中所有能改 ...

  5. Python frozenset集合

    文章目录 Python frozenset集合 Python frozenset集合 set 集合是可变序列,程序可以改变序列中的元素:frozenset 集合是不可变序列,程序不能改变序列中的元素. ...

  6. Python基础---Set(集合)Frozenset(不可变集合)

    SET对象是由具有唯一性的 hashable 对象所组成的无序多项集,否则会报"unhashable type"的错误.目前有两种内置集合类型,set 和 frozenset. s ...

  7. 来自python的【set集合总结/frozenset】

    set定义 集合(set) 是一个无序的不重复的元素序列,能够去重复,删除重复项 使用{},或者set()函数穿件,与dict的符号一样. 空集合必须使用set(),因为{}是用来创建空字典dict ...

  8. Python基本语法_集合set/frozenset_内建方法详解

    目录 目录 前言 软件环境 可变集合Set set函数创建集合 创建空集合 集合元素的唯一性 集合推导式 set类型对象的内置方法 add增加一个元素 remove删除一个元素 pop随机删除并返回一 ...

  9. python将列表转换成集合_python集合变成列表

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 可以存储任意数据类型的集合列表里:可以存储不同的数据类型 s= print s, ...

最新文章

  1. srs 配置http flv集群
  2. 一款DIY矢量网络分析仪:NanoVNA
  3. c语言如何输入汉字_C语言入门的第一个小程序
  4. ASP+页缓存OutputCache Duration用法
  5. 四:Jquery-animate
  6. mysql update case when和where之间的注意事项
  7. 利用DMRMAN备份时出现“管道连接失败”的错误信息的解决方法
  8. 感性电路电流计算_电工初学者会正确计算负载功率吗?一篇文章彻底教会你
  9. gopher协议利用
  10. 与以太坊同源异流,eCash“PoW+雪崩”组合共识各司其职
  11. Mysql中的索引原理
  12. bulid.prop优化代码(好像很强?)
  13. 2022-2028全球重度抑郁症治疗行业调研及趋势分析报告
  14. 基于解剖特征的ACL重建机器人定位系统
  15. 2011,对自己说的话。
  16. UG后处理—刀具行程值的输出
  17. 实战案例!基于 K-Means 聚类算法的客户精准营销模型
  18. Mysql日志知多少?
  19. 液压、气动装置设计分析软件
  20. Excel导入长数据末尾变000

热门文章

  1. c语言中witch作用,【在定语从句中什么时候witch不能用?】作业帮
  2. You have requested to run MSC.Patran on a Windows DESKTOP-(Windows 6.2 (Build 9200: Service Pack 0))
  3. PDF.js预览文件
  4. C# FileStream类的文件流、文件读取写入操作
  5. Yes I can——强兵是怎样炼成的
  6. Windows10任务管理器中的内存用量的使用中(已压缩)、已提交、可用、分页缓冲池、非分页缓冲池是什么意思?
  7. 美国人过去20年患阿尔茨海默症死亡率大幅上升,南部农村地区明显偏高
  8. java中常用的数学计算
  9. 35个优秀的网站页眉页脚设计案例
  10. 钱盾联手12321举报中心 “全流程屏障”威力显现