1. 基础
frozenset(可迭代对象) # 表示frozenset
-
set VS frozenset
"""
set 集合,可变序列,程序可以更改序列的元素
remove()、discard()、add()等支持
frozenset 集合,不可变序列,程序不能改变序列的元素
remove()、discard()、add()等不支持
支持set不改变集合本身的方法
"""
print(dir(frozenset))
# [ 'copy', 'difference', 'intersection',
# 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']
2. 使用场景
"""
1、集合元素不需要改变时,使用frozenset代替set,更安全
2、要求必须时不可变对象时
"""
s = {"Python","java","C"}
fs = frozenset(s) # frozenset({'java', 'C', 'Python'})
# fs添加元素
fs.add("C++") # AttributeError: 'frozenset' object has no attribute 'add'
# s添加元素
s.add("C++")
print(s) # {'java', 'C++', 'Python', 'C'}
set元素添加set
s.add(s) # TypeError: unhashable type: 'set'
因set元素需要时不可改变类型,而set类型本身是可变类型,所以set中添加报错
对于内建类型来说,unhashable(不可哈希)的是可变动类型,如list、set、dict;
网友评论