Python frozenset() 函数

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() 将其转化为冻结集合,再作为字典的键。

上一篇: set()

下一篇: complex()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号