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