在Python元组和frozensets的区别(Difference between tuples

2019-08-07 12:41发布

我使用的快速Python的图书,其中约frozensets笔者会谈,指出自组是可变的,因此unhashable,从而成为不适合作为字典的键,其冻结的同行介绍了学习Python 3中。 除了明显的区别,一个元组是有序的数据结构,同时frozenset,或者更一般的一组,是无序的,是否有一个元组和一个frozenset之间的任何其他方面的差异?

Answer 1:

tuples是不可改变的listsfrozensets是不可改变的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