[英]Dictionary view objects vs sets
我一直在閱讀有關dict.keys()
之類返回的這些字典視圖對象的信息,包括此處有關該主題的帖子。 我知道它們充當字典內容的 windows 而無需顯式存儲所述內容的副本,因此比動態更新鍵列表更有效。 我還發現它們是容器(允許使用in
運算符)但不是序列(不可索引),盡管它們是可迭代的。
總的來說,這聽起來像一個set
,因為他們可以訪問字典的 hash 表,他們甚至提供使用類似set
的操作,如交集/差異。 我能想到的一個區別是set
雖然像這些視圖對象一樣可變,但只能存儲不可變(因此可散列)的對象。
但是,由於字典值不一定是不可變的,因此values
和items
視圖對象本質上是具有可變內容的set
,預計不支持類似set
的操作(減法/交集)。 這讓我懷疑是否將這些視圖對象視為“引用字典的set
”。
我的問題是:這些視圖對象是否與集合完全不同但碰巧具有相似的屬性? 或者它們是使用集合實現的嗎? 兩者之間還有其他主要區別嗎? 最重要的是——將它們視為“基本set
s”是否有害?
比較的隱含點是dict.keys()
和set
元素不能重復。 但是,從鍵獲得的類似集合的字典視圖仍然保留順序,而集合則沒有。
重復的字典鍵:
重復集合元素:
從上面可以看出, set
是無序的,而在當前 Python 版本字典中保持插入順序:
因為字典有插入順序,所以它們可以顛倒,而集合中的這種操作是沒有意義的:
最后,可以更改、刪除和插入set
。 字典視圖 object 只允許查看內容,不能更改它們。
我的問題是,這些視圖對象是否與集合完全不同但恰好具有相似的屬性? 或者它們是使用集合實現的嗎?
該文檔未對實施細節作出任何聲明。
兩者之間還有其他主要區別嗎?
文檔 state“鍵視圖”和“項目視圖”或“值視圖”之間的區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.