字典视图对象与集合
Dictionary view objects vs sets
我一直在阅读 dict.keys()
之类的人返回的这些字典视图对象,包括此处有关该主题的帖子。我知道它们充当字典内容的 windows 而不显式存储所述内容的副本,因此比动态更新键列表更有效。我还发现它们是容器(允许使用 in
运算符)但是 不是 序列(不可索引),尽管它们 是 可迭代的.
总的来说,这听起来像 set
,因为他们可以访问字典的散列 table,他们甚至提供使用 set
类操作,例如 intersection/difference.我能想到的一个区别是 set
,而像这些视图对象一样的 mutable 只能存储 immutable(因此可散列)对象。
但是,由于字典 value 不一定是 immutable,values
和 items
视图对象本质上是set
s 包含 mutable 内容,预计 不 支持类似 set
的操作 (subtraction/intersection)。这让我怀疑是否将这些视图对象视为“引用字典的 set
”。
我的问题是:这些视图对象是否与集合完全不同但碰巧具有相似的属性?或者它们是使用集合实现的吗?两者之间还有其他主要区别吗?最重要的是 - 将它们视为“基本上 set
s” 是否有害?
你的比较隐含的一点是 dict.keys()
和 set
元素不能有重复项。但是,set-like 从键中获得的字典视图仍然保留顺序,而集合则没有。
字典键重复:
重复集元素:
A set object is an unordered collection of distinct hashable objects.
从上面可以看出,set
s 是无序的,而在当前 Python 版本的词典中保持插入顺序:
Changed in version 3.7: Dictionary order is guaranteed to be insertion order.
因为字典有插入顺序,所以它们可以颠倒,而在集合中这样的操作是没有意义的:
最后,一个set
可以修改、删除和插入。字典视图对象只允许查看内容,不能更改内容。
My question is, are these view objects entirely different to sets but happen to have similar properties? Or are they implemented using sets?
文档未声明实施细节。
Any other major differences between the two?
文档说明了“键视图”和“项目视图”或“值视图”之间的区别。
我一直在阅读 dict.keys()
之类的人返回的这些字典视图对象,包括此处有关该主题的帖子。我知道它们充当字典内容的 windows 而不显式存储所述内容的副本,因此比动态更新键列表更有效。我还发现它们是容器(允许使用 in
运算符)但是 不是 序列(不可索引),尽管它们 是 可迭代的.
总的来说,这听起来像 set
,因为他们可以访问字典的散列 table,他们甚至提供使用 set
类操作,例如 intersection/difference.我能想到的一个区别是 set
,而像这些视图对象一样的 mutable 只能存储 immutable(因此可散列)对象。
但是,由于字典 value 不一定是 immutable,values
和 items
视图对象本质上是set
s 包含 mutable 内容,预计 不 支持类似 set
的操作 (subtraction/intersection)。这让我怀疑是否将这些视图对象视为“引用字典的 set
”。
我的问题是:这些视图对象是否与集合完全不同但碰巧具有相似的属性?或者它们是使用集合实现的吗?两者之间还有其他主要区别吗?最重要的是 - 将它们视为“基本上 set
s” 是否有害?
你的比较隐含的一点是 dict.keys()
和 set
元素不能有重复项。但是,set-like 从键中获得的字典视图仍然保留顺序,而集合则没有。
字典键重复:
重复集元素:
A set object is an unordered collection of distinct hashable objects.
从上面可以看出,set
s 是无序的,而在当前 Python 版本的词典中保持插入顺序:
Changed in version 3.7: Dictionary order is guaranteed to be insertion order.
因为字典有插入顺序,所以它们可以颠倒,而在集合中这样的操作是没有意义的:
最后,一个set
可以修改、删除和插入。字典视图对象只允许查看内容,不能更改内容。
My question is, are these view objects entirely different to sets but happen to have similar properties? Or are they implemented using sets?
文档未声明实施细节。
Any other major differences between the two?
文档说明了“键视图”和“项目视图”或“值视图”之间的区别。