我使用的快速Python的图书,其中约frozensets笔者会谈,指出自组是可变的,因此unhashable,从而成为不适合作为字典的键,其冻结的同行介绍了学习Python 3中。 除了明显的区别,一个元组是有序的数据结构,同时frozenset,或者更一般的一组,是无序的,是否有一个元组和一个frozenset之间的任何其他方面的差异?
Answer 1:
tuples
是不可改变的lists
, frozensets
是不可改变的sets
。
tuples
确实是对象的有序集合,但可以包含重复和unhashable对象,并有切片功能
frozensets
不被索引,但是你的功能sets
- (1)元素查找O和功能,如工会和路口。 他们也不能包含重复,像他们的同行可变。
Answer 2:
有些违反直觉 - 关于苯教MOT什么:
sss = frozenset('abc')
sss |= set('efg')
将产生:
frozenset(['a', 'c', 'b', 'e', 'g', 'f'])
当然,这相当于X = X | Y,所以不改变原有frozenset,但它并不半开玩笑术语的嘲弄“不变”的代码评审!
Answer 3:
我想到的一个不同之处是重复的问题。 的元组(1, 1, 1, 1, 2, 2, 2)
就正是你所期望的,但frozenset会删除所有这些重复的,离开你frozenset([1, 2])
Answer 4:
波动性确实提到frozensets未编入索引。 我一直在寻找其他的功能,所以并没有马上意识到标准的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
从事实明显,它不被索引,但尽管这是值得加入这里明确
文章来源: Difference between tuples and frozensets in Python