Python frozenset() 语法
frozenset() 是 Python 的一个内置函数,用于创建一个 “冻结集合”,即不可变的集合。
冻结集合(frozenset)和 普通集合(set)的不同点在于:普通集合中的元素可以被修改,但冻结集合的元素在创建后是保持不变的。你可以将冻结集合看成是普通集合的不可变版本。
冻结集合和普通集合的相同点在于:两者都是无序的,它们的元素可以放在任意位置。
语法:
frozenset(iterable)说明:
frozenset() 函数接收单个参数。
iterable(可选):是一个可迭代对象(如列表、元组、字符串等)。如果 iterable 省略,则返回一个空的冻结集合;如果 iterable 不省略,则创建一个由可迭代项组成的冻结集合。
frozenset 的主要特点是不可变性,这意味着一旦创建,就不能更改其内容。由于其不可变性,frozenset 对象是可哈希的,因此可以用作字典的键,或作为普通 set 的元素。
提示: set() 函数创建的是 “普通集合”,而 frozenset() 创建的是 “冻结集合”。
Python frozenset() 摘要
| 使用频率 | 中 |
|---|---|
| 官方文档 | 查看 |
| 相关函数 | set()、dict()、tuple() |
Python frozenset() 示例
接下来,我们通过一个简单的示例来讲解一下 Python frozenset() 函数是如何使用的。
示例 1:frozenset() 基本用法
colors = ['红', '绿', '蓝']
s = frozenset(colors)
print(s)
print(type(s))运行结果如下。
frozenset({'绿', '红', '蓝'})
<class 'frozenset'>分析:
frozenset() 创建的冻结集合是不可变的,因为我们无法为其添加元素或删除元素。比如在上面例子中,如果在后面执行 s.add('橙'),则会直接报错如下。
(报错)AttributeError: 'frozenset' object has no attribute 'add'frozenset() 应用场景
在实际开发中,冻结集合(即不可变的集合)主要有以下 2 个方面的用途。
- 作为另一个集合的元素。
- 作为字典的键。
示例 2:frozenset 作为另一个集合的元素
s1 = {1, 2, 3}
s2 = frozenset([4, 5, 6])
s1.add(s2)
print(s1)运行结果如下。
{1, 2, 3, frozenset({4, 5, 6})}分析:
在集合的关系中,可能会存在一个集合中的元素是另一个集合的情况。由于普通集合(set)本身是可变的,那么它的实例就不能放在另一个集合中(set 中的元素必须是不可变类型)。所以,冻结集合(frozenset)提供了不可变的集合的功能,当集合不可变时,它就满足了作为集合中的元素的要求,就可以放在另一个集合中了。
对于上面例子来说,如果将 s2 = frozenset([4, 5, 6]) 改为 s2 = [4, 5, 6],再次运行结果如下。
(报错)TypeError: unhashable type: 'list'之所以报错,这是因为列表是可变类型,而集合的元素只能是不可变类型。
示例 3:frozenset 作为字典的键
students = {'Jack': 1001, 'Lucy': 1002, 'Tony': 1003}
key = frozenset([4, 5, 6])
students[key] = 1004
print(students)运行结果如下。
{'Jack': 1001, 'Lucy': 1002, 'Tony': 1003, frozenset({4, 5, 6}): 1004}分析:
字典的键也只能是不可变类型,我们无法将一个普通集合作为字典的键的。但可以使用 frozenset() 将其转化为冻结集合,再作为字典的键。
