集合和视图的区别
我学Python已经一个多月了,最近看到有人讨论视图和集合。我的书《学习Python》里说,视图是可迭代的,里面的对象顺序和字典里的顺序是一样的,但视图也支持集合操作。
我觉得它们能做的事情和集合差不多。看起来像鸭子,叫声也像鸭子,还能进行集合操作,为什么集合和视图要分成两种不同的对象呢?
另外,我搜索了“Python集合视图的区别”,想找找有没有重复的问题,但没找到。
1 个回答
3
只有 dict.keys()
这个字典视图是 始终 作为一个集合存在的(也就是说,它的表现像一个集合,但它是实时反映字典内容的)。
而 dict.values()
这个视图 从来不是 一个集合,因为字典中的值不一定是唯一的,而且也不能保证这些值是可哈希的(这是集合的一个要求)。你在创建值的字典视图时,还需要提前计算所有的哈希值,这可能会非常耗费资源。在这种情况下,你可以直接使用 set(dictionary.values())
。
剩下的就是 dict.items()
这个视图,它在大多数情况下 可以看作 一个集合,只要所有的值都是可哈希的;这是因为当你从这个视图创建交集、并集或其他新的集合时,你 必须 生成一个新的 set
对象,这就要求整个键值对都是可哈希的;在这种情况下,你不能再保证只有键是唯一的。
更多信息可以查看 字典视图对象 的文档。