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)则不具备这种能力。
主要特性
- 不可变性:与
set不同,frozenset不能通过add()、remove()等方法修改其内容。尝试修改会引发AttributeError。 - 可哈希性:由于不可变,
frozenset可哈希,可以作为字典的键或另一个集合的元素。例如:
1fs = frozenset([1, 2, 3]) 2d = {fs: "value"} # 合法操作
创建方式
通过 frozenset() 构造函数创建,参数可以是任何可迭代对象(如列表、元组、字符串等)。若未提供参数,则返回空 frozenset。
1fs1 = frozenset([1, 2, 3]) # 从列表创建 2fs2 = frozenset("hello") # 从字符串创建(元素为字符) 3fs3 = frozenset() # 空 frozenset 4
典型应用场景
- 字典的键:当需要集合作为键时,必须使用
frozenset。
1graph = { 2 frozenset(["A", "B"]): 10, 3 frozenset(["B", "C"]): 5, 4}
- 集合的元素:嵌套集合时,内部集合必须是
frozenset。
1s = {frozenset([1, 2]), frozenset([3, 4])}
- 数据去重与缓存:在需要缓存集合结果或确保数据不可篡改的场景中使用。
示例对比
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 具有以下几个重要特点和优势:
1valid = frozenset(['name', 'age']) 2data = {valid: 'user_info'}
1s = {frozenset([1,2]), frozenset([3,4])}
- 缓存优化:由于
frozenset不可变,可以安全地进行缓存和重用,提高性能。 - 线程安全:在多线程环境中,
frozenset的不可变性保证了线程安全。 - 数学运算:在需要进行集合运算但又不希望原始集合被修改的场景下,
frozenset是完美的选择。 - 数据验证:可以用作常量集合来验证数据,确保集合内容不会被意外修改。
frozenset 支持所有集合的操作(如 union、intersection 等),但不会修改自身,而是返回新的 frozenset 对象。这一特性使其在函数式编程范式下特别有价值。
《Python 的内置函数 frozenset》 是转载文章,点击查看原文。