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