Python 的内置函数 frozenset 用于创建一个不可变的集合对象。与普通集合 set 不同,frozenset 一旦创建就不能修改(如添加或删除元素),这使得它可以作为字典的键或其他集合的元素。

基本用法

fs = frozenset([1, 2, 3, 4])
print(fs)  # 输出: frozenset({1, 2, 3, 4})

特性

  1. 不可变性frozenset 的内容在创建后无法更改,因此它是哈希的,可以作为字典的键。

    d = {frozenset([1, 2]): "value"}
    print(d)  # 输出: {frozenset({1, 2}): 'value'}
  2. 支持集合操作frozenset 支持常见的集合操作,如并集(union)、交集(intersection)、差集(difference)等。

    fs1 = frozenset([1, 2, 3])
    fs2 = frozenset([3, 4, 5])
    print(fs1.union(fs2))  # 输出: frozenset({1, 2, 3, 4, 5})
  3. 性能优化:由于不可变,frozenset 在某些操作上比可变集合更高效,尤其是在哈希和比较时。

应用场景

  • 字典键:当需要使用集合作为字典的键时,frozenset 是唯一选择。

    groups = {
        frozenset(["admin", "editor"]): "high_privilege",
        frozenset(["viewer"]): "low_privilege"
    }
  • 集合元素:当集合的元素需要是另一个集合时,必须使用 frozenset

    s = {frozenset([1, 2]), frozenset([3, 4])}

注意事项

  • 创建 frozenset 时,传入的可迭代对象中的重复元素会被自动去重。
  • 由于不可变性,frozenset 没有 addremove 等方法。

示例

# 去重示例
fs = frozenset([1, 2, 2, 3])
print(fs)  # 输出: frozenset({1, 2, 3})

# 错误示例(尝试修改会报错)
fs.add(4)  # 抛出 AttributeError: 'frozenset' object has no attribute 'add'

frozenset 提供了一种安全、高效的方式来处理不可变集合需求,特别适用于需要哈希或不可变性的场景。

标签: none

添加新评论