我可以提供一些簡單的例子,說明何時使用冷凍集合將是最好的選擇,以幫助我更好地理解概念。frozenset() - 什麼時候可以使用它們的示例
1
A
回答
8
frozenset()
對象可以用來作爲字典鍵和作爲值內部的set()
和frozenset()
對象,其中set
對象不能。 set()
值是可變的且不可哈希值,frozenset()
值是不可變的且可哈希值。
它們是set
對象什麼tuple
對象是list
對象。
演示:通過存儲frozenset()
常數與字節碼
if somevar in {'foo', 'bar', 'baz'}:
:
>>> import dis
>>> dis.dis(compile("if somevar in {'foo', 'bar', 'baz'}: pass", '<stdin>', 'exec'))
1 0 LOAD_NAME 0 (somevar)
3 LOAD_CONST 4 (frozenset({'foo', 'baz', 'bar'}))
6 COMPARE_OP 6 (in)
9 POP_JUMP_IF_FALSE 15
12 JUMP_FORWARD 0 (to 15)
>> 15 LOAD_CONST 3 (None)
18 RETURN_VALUE
因爲
>>> s = set([1, 2])
>>> fs = frozenset(s)
>>> adict = {}
>>> adict[s] = 42 # a set as key does not work
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> adict[fs] = 42 # a frozenset as key works
>>> s.add(s) # a set as value in a set does not work
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> s.add(fs) # a frozenset as value in a set works
最近Python版本將優化使用一組文字的無論如何,設置文字不能突變;這使得使用集合來測試非常有效。常規的set()
不能以這種方式存儲,因爲這樣可以讓您修改與字節對象一起存儲的常量。
2
爲了恭維Martijn說過的話,我經常使用它們作爲緩存鍵。例如,一個memoize修飾器可以關閉(args, frozenset(kwargs.items())
。
相關問題
- 1. 什麼是BigInteger,我們什麼時候可以使用它?
- 2. Twisted,gevent eventlet - 我什麼時候可以使用它們
- 3. 什麼是切換按鈕以及我們什麼時候可以使用它?
- 4. intn_t什麼時候使用它,什麼時候不使用
- 5. 什麼時候使用指針,何時不使用它們
- 6. 我什麼時候可以使用Task.Yield()?
- 7. 什麼時候可以使用filter_input()
- 8. 什麼時候可以使用IORef?
- 9. 什麼時候可以使用lodash.after()?
- 10. 你什麼時候可以使用uint_least16_t
- 11. 我什麼時候可以使用AppDomain?
- 12. 什麼時候我們可以使用Oracle外部表
- 13. 我們什麼時候可以使用自定義語料庫?
- 14. flink Windows,它們什麼時候啓動
- 15. R的class.ind()函數做什麼?我什麼時候可以使用它?
- 16. SqlCommand.Prepare()做什麼以及它應該在什麼時候使用?
- 17. 什麼是JavaScript對象,它們什麼時候有用?
- 18. 什麼時候我們使用let rec?
- 19. Android:我們什麼時候使用getIntent()?
- 20. 我們什麼時候使用XMLSerialization?
- 21. 什麼時候最早可以動態地添加JS/CSS並應用它們
- 22. 日曆add()vs roll()我們什麼時候使用它?
- 23. PHP mysql_close()和mysql_free_result() - 我應該在什麼時候使用它們?
- 24. 如何知道什麼時候創建set或frozenset
- 25. CourseCompletions是什麼?它們是什麼時候創建的?
- 26. C#:什麼時候使用waitHandle,當我們可以使用threadPool屬性
- 27. 什麼時候可以調用BarcodeScanner.GetDefaultAsync()?
- 28. Symfony sfFormFilters - 你什麼時候使用它?
- 29. 什麼時候應該使用可可?
- 30. 什麼時候可以在Bash中使用|&?它可用於其他shell嗎?
我也開始在.compile()中蘸我的腳趾。這也進一步鞏固了我對這個功能的理解,個人感謝。 – Phoenix