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》 是转载文章,点击查看原文


上一篇:下一篇:

最近更新


上一篇:下一篇: