frozensets之间的平等

时间:2016-07-16 06:17:41

标签: python set immutability

示例:

>>> tuple((1, 2)) == tuple((2, 1))
False
>>> frozenset((1, 2)) == frozenset((2, 1))
True

冻结集是不可变的。我希望不可变对象之间的相等性应该按顺序确定,但显然情况并非如此。

如何在不转换为不同类型的情况下丢弃具有相同元素和不同顺序的冻结?

1 个答案:

答案 0 :(得分:1)

简短的回答是你不能,因为正如评论中指出的那样,集合和frozensets是无序的数据结构。以下是docs * 的一些摘录,以支持此声明:

  

set对象是不同的可哈希对象的无序集合。

     

目前有两种内置集类型,setfrozensetset类型是可变的 - 可以使用add()remove()等方法更改内容。由于它是可变的,因此它没有哈希值,不能用作字典键或另一组的元素。 frozenset类型是不可变和可散列的 - 其内容在创建后不能更改;因此,它可以用作字典键或另一组的元素。

* Python 2.7.12

为了更好地掌握平等问题,我建议您使用Online Python Tutor运行以下代码段:

tup_1 = tuple((1, 2))
tup_2 = tuple((2, 1))
fs_1 = frozenset((1, 2))
fs_2 = frozenset((2, 1))

这是一个非常方便的工具,可以在代码逐步执行时呈现内存中对象的图形表示。我附上了截图:

enter image description here