Python中元组和frozense的区别

我正在使用“快速Python书籍”学习Python 3,作者在这里谈到了frozensets,指出由于集合是可变的,因此不能被修改,因此不适合作为字典密钥,而是引入了冻结的对应关系。 除了一个元组是一个有序的数据结构而frozenset或者更一般地说是一个无序的明显不同之外,元组和冷凝集之间还有其他区别吗?

tuples是不可变的listsfrozensets是不可变的sets

tuples确实是一个有序的对象集合,但是它们可以包含重复和不可重复的对象,并具有切片function

frozensets没有编入索引,但是您具有sets – O(1)元素查找的function以及诸如联合和交叉点等function。 他们也不能包含重复,像他们的可变对手。

有点反直觉 – 这个好运气怎么样:

 sss = frozenset('abc') sss |= set('efg') 

会产生:

 frozenset(['a', 'c', 'b', 'e', 'g', 'f']) 

当然,这相当于x = x | y,所以不要改变原始的冷冻集,但是它不会对代码评论者的“不可变的”一词产生嘲弄!

想到的一个区别是重复的问题。 一个元组(1, 1, 1, 1, 2, 2, 2) 1,1,1,2,2,2 (1, 1, 1, 1, 2, 2, 2)就是你所期望的,但是一个冷冻集会删除所有这些副本,留给你的是frozenset([1, 2])

波动确实提到frozensets没有被索引。 我正在看其他function,所以没有立即意识到,标准的python切片是不可能的。

 a = frozenset((1, 1, 1, 1, 2, 2, 2)) # results in frozenset([1, 2]) print a[0] 

会出错:

 TypeError: 'frozenset' object does not support indexing 

很明显,它没有被索引,但是在这里值得明确地加上