Python 的内置函数 frozenset

作者:IMPYLH日期:2025/11/2

Python 内建函数列表 > Python 的内置函数 frozenset

1def frozenset(x):
2    '''
3    类型转换为 frozenset
4
5    :param x: 一个变量
6    :return: 转换为 frozenset 后的值
7    '''
8

Python 的内置函数 frozenset 用于创建一个不可变的集合对象,它继承了普通集合(set)的所有特性,如无序性、元素唯一性等,但关键区别在于 frozenset 一旦创建就不能被修改,因此它是可哈希的(hashable)。这使得 frozenset 可以作为字典的键或其他集合的元素,而普通的可变集合(set)则不具备这种能力。

主要特性

  1. 不可变性:与 set 不同,frozenset 不能通过 add()remove() 等方法修改其内容。尝试修改会引发 AttributeError
  2. 可哈希性:由于不可变,frozenset 可哈希,可以作为字典的键或另一个集合的元素。例如:
1fs = frozenset([1, 2, 3])  
2d = {fs: "value"}  # 合法操作  
  1. 支持集合操作frozenset 支持所有集合操作,如并集(|)、交集(&)、差集(-)等,但这些操作会返回新的 frozenset 对象而非修改原对象。

创建方式

通过 frozenset() 构造函数创建,参数可以是任何可迭代对象(如列表、元组、字符串等)。若未提供参数,则返回空 frozenset

1fs1 = frozenset([1, 2, 3])       # 从列表创建
2fs2 = frozenset("hello")         # 从字符串创建(元素为字符)
3fs3 = frozenset()                #  frozenset
4

典型应用场景

  1. 字典的键:当需要集合作为键时,必须使用 frozenset
1graph = {  
2    frozenset(["A", "B"]): 10,  
3    frozenset(["B", "C"]): 5,  
4}  
  1. 集合的元素:嵌套集合时,内部集合必须是 frozenset
1s = {frozenset([1, 2]), frozenset([3, 4])}  
  1. 数据去重与缓存:在需要缓存集合结果或确保数据不可篡改的场景中使用。

示例对比

1# 可变集合(set)的局限性
2s = {1, 2}
3d = {s: "error"}  # TypeError: unhashable type: 'set'
4
5# 使用 frozenset 解决
6fs = frozenset(s)
7d = {fs: "valid"}  # 成功
8

frozenset 的出现丰富了集合的应用场景frozenset ,尤其是在需要不可变性和可哈希性的场景中。

frozenset是 Python 中不可变集合的实现,它的存在大大扩展了集合的应用范围。与普通 set 相比,frozenset 具有以下几个重要特点和优势:

  1. 作为字典键:由于 frozenset 是不可变的,它可以被用作字典的键,而普通 set 则不行。这在需要建立集合到值的映射时特别有用。
1valid = frozenset(['name', 'age'])  
2data = {valid: 'user_info'}  
  1. 集合元素frozenset 可以作为其他集合的元素,而普通 set 不能。
1s = {frozenset([1,2]), frozenset([3,4])}  
  1. 缓存优化:由于 frozenset 不可变,可以安全地进行缓存和重用,提高性能。
  2. 线程安全:在多线程环境中,frozenset 的不可变性保证了线程安全。
  3. 数学运算:在需要进行集合运算但又不希望原始集合被修改的场景下,frozenset 是完美的选择。
  4. 数据验证:可以用作常量集合来验证数据,确保集合内容不会被意外修改。

frozenset 支持所有集合的操作(如 unionintersection 等),但不会修改自身,而是返回新的 frozenset 对象。这一特性使其在函数式编程范式下特别有价值。


Python 的内置函数 frozenset》 是转载文章,点击查看原文


相关推荐


MySQL 复合查询全解析:从单表到多表的实战进阶
藤椒味的火腿肠真不错2025/10/31

目录 1. 单表查询回顾:夯实基础操作 1.1 多条件筛选查询 1.2 自定义排序查询 1.3 聚合与筛选结合查询 2. 多表查询:关联多张表取数 2.1 两表关联查询 2.2 三表关联查询 3. 自连接:同一张表的 “自我关联” 4. 子查询:嵌套查询的灵活应用 4.1 单行子查询(返回 1 行结果) 4.2 多行子查询(返回多行结果) 4.3 子查询嵌入 from 子句 5. 合并查询:union 与 union all 在 MySQL 日常使用中,单表查询仅能满


面试自述:从单体到微服务的实践之路
360_go_php2025/10/28

​ 在最近的项目中,我负责从零搭建一个基于 Spring Boot + Dubbo + Redis + RocketMQ 的分布式微服务系统。整个项目大约持续一个多月,代码量较大,是我第一次完整实践从后端架构设计到部署上线的全过程。   1. 自我介绍 略 2. 项目介绍 略 3. 为什么要做微服务?   做微服务的核心原因是为了解耦与扩展性。单体项目后期难以维护,功能耦合严重、部署困难、影响面大。  ​编辑 微服务将系统拆分成多个独立模块(如用户、订单、支付、库存等),每个服务可以独立开发、


Redis(82)如何解决Redis的缓存雪崩问题?
Victor3562025/10/25

缓存雪崩的概念 缓存雪崩(Cache Avalanche)指的是在某一时刻大量缓存数据同时过期或者缓存服务器宕机,导致大量请求直接打到数据库,从而使数据库瞬时压力剧增,甚至可能导致数据库崩溃。 解决缓存雪崩问题的方法 为了解决缓存雪崩问题,可以采取以下策略: 缓存数据的过期时间设置为随机值:避免在同一时间大量缓存数据同时失效。 加锁或队列:在缓存失效时,通过机制控制对数据库的访问,避免大量请求同时打到数据库。 双写策略:更新缓存的同时也更新数据库,保证数据的一致性。 数据预热:在系统启动时,预


猿辅导MySQL面试常见问题解析(一)
360_go_php2025/10/23

​ 在进行MySQL相关的面试时,尤其是在如猿辅导这样注重技术底层实现的公司,面试官往往会问一些关于数据库优化、事务管理、锁机制等方面的问题。以下是一些常见的MySQL面试问题及其详细解答,帮助你更好地准备面试。​编辑 1. MySQL建立索引的原则​编辑 在MySQL中,索引是提升查询性能的重要工具。然而,索引虽然能加速查询,但也会占用额外的空间,并且会影响写操作的性能。因此,建立索引时需要遵循一些原则: 选择性高的列:选择性高的列,指的是该列的唯一值多,数据分布较为均匀。对于这些列建立索


Swift 字符串与字符完全导读(二):Unicode 视图、索引系统与内存陷阱
unravel20252025/10/22

Unicode 的三种编码视图 Swift 把同一个 String 暴露成 4 种迭代方式: 视图元素类型单位长度典型用途StringCharacter人眼“一个字符”业务逻辑utf8UInt81~4 字节网络/文件 UTF-8 流utf16UInt162 或 4 字节与 Foundation / Objective-C 交互unicodeScalarsUnicodeScalar21-bit精确到标量,做编码分析 代码一览 l


AWS EKS 集成Load Balancer Controller 对外暴露互联网可访问API [AWS 中国宁夏区]
thinktik2025/10/20

本文主要介绍AWS EKS和AWS Elastic Load Balancing的集成;我们可以通过AWS ELB将运行在EKS中的服务暴露出去,供互联网访问。 AWS ELB提供的负载均衡,高可用,按流量自动弹性和自带的安全性服务(比如基础版的AWS Shield)给为我们的网络服务提供了高质量的保证。虽然我们也可以直接让K8S Service服务直接以public ip的方式来对外服务,但是一般技术和成本等综合来考虑不如AWS ELB。 如下图,AWS ELB充当运行在AWS上的动态API服


AI环境下的网络安全人才的发展方向
Mr_Meng_De2025/10/19

2025年9月16日,2025年国家网络安全宣传周分论坛上发布《AI时代网络安全产业人才发展报告(2025)》。 《报告》由工业和信息化部教育与考试中心、安恒信息、中国联合网络通信有限公司软件研究院、全国数字安全行业产教融合共同体、中国网络空间新兴技术安全创新论坛、智联招聘、中国网络空间安全人才教育论坛联合编制。 AI驱动网络安全领域岗位革新与挑战升级 随着人工智能技术与网络安全行业的深度融合,当代大学生对这一技术变革带来的就业影响形成了较为全面的认知。约三分之一(33.5%)的学生表现出


策略模式:让算法选择像点菜一样简单
太过平凡的小蚂蚁2025/10/18

什么是策略模式? ​策略模式(Strategy Pattern)​​ 是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。 简单来说:​定义策略家族,让客户端自由选择。​​ 现实世界类比 想象你去餐厅吃饭: ​策略接口​:点菜这个行为 ​具体策略​:中餐、西餐、日料等不同菜系 ​上下文​:餐厅(提供点菜环境) ​客户端​:你(根据心情选择今天吃什么) 模式结构 classDiagra


VSCODE GDB调试
Gary Studio2025/10/16

流程 1.首先点击左侧的小虫子按钮 2.选择gdb调试 3.在program一栏填上你需要调试的可执行文件 注意:编译的时候记得在编译命令的最后或者在前面的语句中添加-g 增加调试的选项 例如下面 PS D:\CODE\c> gcc .\04_example2.c -o .\04_example2 -g 4.在需要调试的代码打上断点即可开启运行。 补充 有时候运行不起来有可能是没有安装gdb或者是gdb的环境变量没有配置造成的 验证gdb是否安装 输入以下指令


SpringBoot实现JWT动态密钥轮换
风象南2025/10/15

背景:为什么 JWT 密钥也要"轮换" JWT(JSON Web Token) 是当代认证体系的常用方案, 无论是单体系统、微服务、还是前后端分离登录,几乎都会用到它。 但在大多数系统里,签名密钥往往是一成不变的—— 一旦生成,常年不换,代码里写死或放在配置文件中。 这其实非常危险: 一旦密钥被误传或泄露,攻击者就能伪造任意用户的合法 Token 无论是测试环境误配置,还是日志误打出 key,都可能导致密钥泄露,带来安全隐患 于是我们面临一个工程问题: "如何能动态更新 JWT 签名密钥,

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读