8.1 set-元组
集合 frozenset 是 不可变的 set。它提供了集合的所有功能,但不允许在创建后修改其元素。frozenset在需要存储唯一元素并确保集合不被改变时非常有用。
创建 frozenset
可以使用函数 frozenset() 来创建 frozenset,传递一个可迭代对象(列表、元组、字符串等)给它。
例子:
从列表创建frozenset
# 从列表创建 frozenset
fset1 = frozenset([1, 2, 3, 4])
print(fset1) # 输出: frozenset({1, 2, 3, 4})
从字符串创建frozenset
# 从字符串创建 frozenset
fset2 = frozenset("hello")
print(fset2) # 输出: frozenset({'h', 'e', 'l', 'o'})
创建空的frozenset
# 创建空的 frozenset
fset3 = frozenset()
print(fset3) # 输出: frozenset()
8.2 frozenset 的基本方法
frozenset 支持大多数可变集合 (set) 的方法,但由于它是不可变的,无法使用改变集合的方法。
例子:
集合的合并 (union)
fset1 = frozenset([1, 2, 3, 4])
fset2 = frozenset([3, 4, 5, 6])
# 集合的合并 (union)
print(fset1 | fset2) # 输出: frozenset({1, 2, 3, 4, 5, 6})
print(fset1.union(fset2)) # 输出: frozenset({1, 2, 3, 4, 5, 6})
集合的交集 (intersection)
fset1 = frozenset([1, 2, 3, 4])
fset2 = frozenset([3, 4, 5, 6])
# 集合的交集 (intersection)
print(fset1 & fset2) # 输出: frozenset({3, 4})
print(fset1.intersection(fset2)) # 输出: frozenset({3, 4})
集合的差集 (difference)
fset1 = frozenset([1, 2, 3, 4])
fset2 = frozenset([3, 4, 5, 6])
# 集合的差集 (difference)
print(fset1 - fset2) # 输出: frozenset({1, 2})
print(fset1.difference(fset2)) # 输出: frozenset({1, 2})
对称差 (symmetric difference)
fset1 = frozenset([1, 2, 3, 4])
fset2 = frozenset([3, 4, 5, 6])
# 对称差 (symmetric difference)
print(fset1 ^ fset2) # 输出: frozenset({1, 2, 5, 6})
print(fset1.symmetric_difference(fset2)) # 输出: frozenset({1, 2, 5, 6})
8.3 frozenset 的应用
frozenset 在以下情况很有用:
作为字典的键使用:
因为 frozenset 是不可变的,可以用作字典的键。
fset1 = frozenset([1, 2, 3])
fset2 = frozenset([3, 4, 5])
d = {fset1: "first", fset2: "second"}
print(d) # 输出: {frozenset({1, 2, 3}): 'first', frozenset({3, 4, 5}): 'second'}
存储不可变集合:
如果需要创建一个不会被更改的唯一元素集合,那么frozenset是个很好的选择。
数据安全:
使用 frozenset 可以保证数据在程序运行期间不会被意外更改。
GO TO FULL VERSION