Python中frozenset,秒变不可变集合,再也不用担心多线程了!

目录

1、Frozenset基础介绍 🌐

1.1 Frozenset定义与创建

1.2 不可变集合特性

1.3 与Set的区别对比

2、Frozenset操作实践 🧩

2.1 初始化与添加元素尝试

2.2 成员测试: in & not in

2.3 集合运算: 并集、交集、差集

2.4 使用场景示例: 字典键、函数参数默认值

2.5 frozenset转换技巧

3、Frozenset进阶应用 🔍

3.1 Hashable特性与字典键优化

3.2 并发安全与多线程环境

3.3 序列化与数据交换安全

4、性能考量与最佳实践 ⏱️

4.1 Frozenset内存占用分析

4.2 操作效率比较

4.3 适用场景讨论

5、实战演练:Frozenset解决实际问题 🎯

5.1 数据库去重索引构建

5.2 并发编程数据同步

5.3 JSON序列化特殊处理

6、总结与展望 🚀



1、Frozenset基础介绍 🌐

1.1 Frozenset定义与创建

在Python中,frozenset是一种不可变的集合数据类型 ,意味着一旦创建,其内容就不能被修改。它继承了集合(set)的所有特性,如无序性、唯一性,但不具备添加或删除元素的能力。创建frozenset可以通过直接将一个可迭代对象传递给frozenset()构造函数来完成。

# 创建frozenset实例
immutable_set = frozenset([1, 2, 3])
print(immutable_set)  # 输出: frozenset({1, 2, 3})

1.2 不可变集合特性

由于frozenset的不可变性,它成为了哈希表的理想键值类型 ,因为哈希表的键要求是不可变且可哈希的。这意味着你可以将frozenset用作字典的键,而普通的set则不行。

# 使用frozenset作为字典键
dict_example = {frozenset([1, 2]): 'Tuple', frozenset(['a', 'b']): 'List'}
print(dict_example[frozenset([1, 2])])  # 输出: Tuple

1.3 与Set的区别对比

尽管frozensetset在功能上相似,但它们的主要区别在于可变性:

  • Set:是可变集合,允许添加(add)、删除(remove)元素以及执行其他修改操作。

  • Frozenset:是不可变集合,不支持任何改变其内容的操作,但支持集合运算如并集(union)、交集(intersection)等,并且可以被用作字典的键或作为集合成员。

通过下面的例子,可以直观地看到两者的差异:

mutable_set = set([1, 2, 3])
mutable_set.add(4)  # 合法操作
print(mutable_set)  # 输出: {1, 2, 3, 4}try:immutable_set.add(4)  # 这会引发TypeError
except AttributeError as e:print(e)  # 输出: 'frozenset' object has no attribute 'add'

通过上述内容,我们深入探讨了frozenset的基本概念、其不可变性特质以及与常规set的区别,为理解和运用这一数据结构奠定了坚实的基础。接下来的章节将进一步探索其高级应用与性能考量。

2、Frozenset操作实践 🧩

2.1 初始化与添加元素尝试

虽然frozenset不允许添加或删除元素,我们可以通过创建新的frozenset来模拟添加或移除元素的效果。首先,让我们尝试初始化一个frozenset并观察当尝试修改时会发生什么。

# 初始化frozenset
my_frozenset = frozenset([1, 2, 3])
print(my_frozenset)  # 输出: frozenset({1, 2, 3})# 尝试添加元素,这将失败
try:my_frozenset.add(4)
except AttributeError as e:print("错误:", e)  # 输出: 错误: 'frozenset' object has no attribute 'add'

2.2 成员测试: in & not in

frozenset支持快速的成员测试,这对于判断一个元素是否存在于集合中非常有用。

# 成员测试
print(2 in my_frozenset)  # 输出: True
print(4 not in my_frozenset)  # 输出: True

2.3 集合运算: 并集、交集、差集

frozenset支持标准的集合运算,包括并集(union)、交集(intersection)和差集(difference)。

another_set = frozenset([3, 4, 5])# 并集
union_result = my_frozenset.union(another_set)
print(union_result)  # 输出: frozens

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/41272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

登录设计(实战项目)-1个手机号多用户身份登录

一. 背景: 该需求是一个互联网医院的预约单场景,护士在小程序上申请患者查房预约单,医生在小程序上对预约单进行接单,护士开始查房后填写查房小结,客户需要对用户信息进行授权,医生查房后进行签字&#xff…

劲爆!华为享界两款新车曝光,等等党有福了

文 | AUTO芯球 作者 | 雷慢 劲爆啊,北汽的一份环境影响分析报告, 不仅曝光了享界S9的生产进展, 还泄露了自家的另两款产品, 第一款是和享界S9同尺寸的旅行车, 我一看,这不是我最喜欢的“瓦罐”吗&…

v-html 空格/换行不生效

接口返回的内容如下&#xff1a;有空格有换行&#xff0c;但 使用v-html无效 需加css样式 white-space: pre-wrap; <div class"pretty-html" v-html"Value"></div>.pretty-html {white-space: pre-wrap; /* 保留空格和换行&#xff0c;并允许…

掌握麦肯锡精英的6个技巧,你也能成为1%的精英!

不知道大家有没有想过&#xff0c;我们和那些全球顶尖精英的差距可能只有1%&#xff0c;只是99%的人还不知道这件事。 今天给大家推荐一本好书&#xff0c;《你和麦肯锡精英的差别只有1%》。优思学院发现&#xff0c;在我们的六西格玛、精益管理的学生中很多人对自己没有自信。…

软通动力子公司鸿湖万联最新成果SwanLink AI亮相世界人工智能大会

7月4日&#xff0c;2024世界人工智能大会暨人工智能全球治理高级别会议&#xff08;WAIC 2024&#xff09;在上海拉开帷幕&#xff0c;软通动力董事长兼首席执行官刘天文受邀出席开幕式。其间&#xff0c;软通动力携子公司鸿湖万联深度参与到大会各项活动中&#xff0c;并全面展…

C语言_结构体初阶(还未写完)

结构体的声明 1. 什么是结构&#xff1f;结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量 数组&#xff1a;一组相同类型元素的集合 结构体&#xff1a;一组不一定相同类型元素的集 2. 结构的声明 struct tag //tag根据实际情况给名字…

Spring注解@Qualifier

Autowired 注解是 Spring 依赖注入。但是有些场景下仅仅靠这个注解不足以让Spring知道到底要注入哪个 bean。 默认情况下&#xff0c;Autowired 按类型装配 Spring Bean。 如果容器中有多个相同类型的 bean&#xff0c;则框架将抛出 NoUniqueBeanDefinitionException&#xff0…

数字化产科管理平台全套源码,java产科电子病历系统源码

数字化产科管理平台全套成品源码&#xff0c;产科电子病历系统源码&#xff0c;多家大型妇幼专科医院应用案例。源码完全授权交付。 数字化产科管理平台&#xff08;智慧产科系统&#xff09;是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天以内的一…

数据库MySQL学习笔记

数据库MySQL学习笔记 主要记录常见的MySQL语句学习过程&#xff0c;增删改查。 -- 显示所有数据库 SHOW DATABASES;-- 创建新数据库 CREATE DATABASE mydatabase;-- 使用数据库 USE mydatabase;-- 显示当前数据库中的所有表 SHOW TABLES;-- 创建新表 CREATE TABLE users (id …

BERT--学习

一、Transformer Transformer&#xff0c;是由编码块和解码块两部分组成&#xff0c;其中编码块由多个编码器组成&#xff0c;解码块同样也是由多个解码块组成。 编码器&#xff1a;自注意力 全连接 多头自注意力&#xff1a;Q、K、V 公式&#xff1a; 解码块&#xff1…

【Hive实战】 HiveMetaStore的指标分析

HiveMetaStore的指标分析&#xff08;一&#xff09; 文章目录 HiveMetaStore的指标分析&#xff08;一&#xff09;背景目标部署架构 hive-site.xml相关配置元数据服务的指标相关配置 源码部分&#xff08;hive2.3系&#xff09;JvmPauseMonitor.javaHiveMetaStore的内部类HMS…

【anaconda】—“conda info“命令后conda配置和环境信息的理解

文章目录 conda配置和环境信息的理解 conda配置和环境信息的理解 安装anaconda成功后&#xff0c;打开cmd&#xff0c;输入"conda info"命令&#xff0c;结果显示如下&#xff1a; conda的配置和环境信息的输出。以下是对每个字段的解释&#xff1a; active environm…

H2 Database Console未授权访问漏洞封堵

背景 H2 Database Console未授权访问&#xff0c;默认情况下自动创建不存在的数据库&#xff0c;从而导致未授权访问。各种未授权访问的教程&#xff0c;但是它怎么封堵呢&#xff1f; -ifExists 很简单&#xff0c;启动参数添加 -ifExists &#xff0c;它的含义&#xff1a…

中电金信:加快企业 AI 平台升级,构建金融智能业务新引擎

在当今数字化时代的浪潮下&#xff0c;人工智能&#xff08;AI&#xff09;技术的蓬勃发展正为各行业带来前所未有的变革与创新契机。尤其是在金融领域&#xff0c;AI 模型的广泛应用已然成为提升竞争力、优化业务流程以及实现智能化转型的关键驱动力。然而&#xff0c;企业在积…

【C++ 】解决 C++ 语言报错:Null Pointer Dereferenc

文章目录 引言 在 C 编程中&#xff0c;空指针解引用&#xff08;Null Pointer Dereference&#xff09;是一种常见且危险的错误。当程序试图通过空指针访问内存时&#xff0c;会导致程序崩溃或产生不可预期的行为。本文将详细探讨空指针解引用的成因、检测方法及其预防和解决…

微信新宠!淘宝扭蛋机小程序,让购物更添乐趣

在移动互联网飞速发展的今天&#xff0c;微信小程序以其便捷性、即用即走的特点&#xff0c;迅速成为了用户日常生活中不可或缺的一部分。而在众多小程序中&#xff0c;一款名为“淘宝扭蛋机”的新晋“网红”&#xff0c;正以其独特的玩法和丰富的惊喜&#xff0c;为购物体验增…

【Hive实战】HiveMetaStore的指标采集告警

HiveMetaStore的指标采集告警 文章目录 HiveMetaStore的指标采集告警背景部署概要图 开启HiveMetaStore的JMX指标采集&#xff08;Hadoop2指标系统&#xff09;指标监控查询指标核心指标选择告警 遗留问题 背景 在远程模式的Metastore下&#xff0c;对其开启Hadoop2指标采集以…

简单配置VScode轻量级C++竞赛环境

1. 安装拓展 Chinese是中文&#xff0c;需要重启才可以运行&#xff0c;C/C拓展只是进行语法代码提示&#xff0c;不需要进行任何配置修改&#xff0c;默认即可。 2. 创建文件 如上图创建好各级文件夹&#xff0c;其中C是工作文件夹&#xff0c;.vscode是配置文件夹&#xff0…

【网络安全】Host碰撞漏洞原理+工具+脚本

文章目录 漏洞原理虚拟主机配置Host头部字段Host碰撞漏洞漏洞场景工具漏洞原理 Host 碰撞漏洞,也称为主机名冲突漏洞,是一种网络攻击手段。常见危害有:绕过访问控制,通过公网访问一些未经授权的资源等。 虚拟主机配置 在Web服务器(如Nginx或Apache)上,多个网站可以共…

学习测试2-方法

设计测试用例 设计测试用例的万能公式 (在没有需求文档的情况下&#xff09; 软件质量模型 效率就是性能 兼容性测试 浏览器 谷歌 IE 火狐 苹果 百度 Windows7 10 11 苹果系统 app 不同品牌 小米 vivo 华为 苹果 不同的操作系统 安卓 鸿蒙 苹果 -----------------------…