leg*_*s2k 46 python tuples set data-structures
我正在使用The Quick Python Book学习Python 3,其中作者讨论了frozensets,声明由于集合是可变的,因此不可删除,从而变得不适合成为字典键,因此引入了它们的冻结对应物.除了元组是有序数据结构的明显差异,而冻结集,或更一般地说是集合,是无序的,元组和冻结集之间是否还有其他差异?
Vol*_*ity 74
tuples是不可变的lists,frozensets是不可改变的sets.
tuples 确实是一个有序的对象集合,但它们可以包含重复和不可用的对象,并具有切片功能
frozensets没有索引,但您具有sets- O(1)元素查找功能,以及联合和交叉点等功能.它们也不能包含重复项,就像它们的可变副本一样.
F1R*_*ors 11
有点反直觉 - 这个怎么样:
sss = frozenset('abc')
sss |= set('efg')
Run Code Online (Sandbox Code Playgroud)
将产量:
frozenset(['a', 'c', 'b', 'e', 'g', 'f'])
Run Code Online (Sandbox Code Playgroud)
当然,这相当于x = x | y,所以不要改变原来的冷冻集,但它并不是对代码审查者的"不可变"一词的嘲弄!
想到的一个区别是重复问题.一个元组(1, 1, 1, 1, 2, 2, 2)将完全符合您的预期,但是一个冻结组将删除所有这些重复项,让您随意frozenset([1, 2]).
波动性确实提到了冻结没有编入索引.我在看其他功能,所以没有立即意识到标准的python切片是不可能的.
a = frozenset((1, 1, 1, 1, 2, 2, 2)) # results in frozenset([1, 2])
print a[0]
Run Code Online (Sandbox Code Playgroud)
会给出错误:
TypeError: 'frozenset' object does not support indexing
Run Code Online (Sandbox Code Playgroud)
很明显它没有编入索引,但是值得在这里明确添加