程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python frozenset集合

編輯:Python

文章目錄

  • Python frozenset集合


Python frozenset集合

set 集合是可變序列,程序可以改變序列中的元素;frozenset 集合是不可變序列,程序不能改變序列中的元素。set 集合中所有能改變集合本身的方法,比如 remove()、discard()、add() 等,frozenset 都不支持;set 集合中不改變集合本身的方法,fronzenset 都支持。

我們可以在交互式編程環境中輸入dir(frozenset)來查看 frozenset 集合支持的方法:

>>> dir(frozenset)
['copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']

frozenset 集合的這些方法和 set 集合中同名方法的功能是一樣的。

兩種情況下可以使用 fronzenset:

  1. 當集合的元素不需要改變時,我們可以使用 fronzenset 替代 set,這樣更加安全。
  2. 有時候程序要求必須是不可變對象,這個時候也要使用 fronzenset 替代 set。比如,字典(dict)的鍵(key)就要求是不可變對象。

下面程序演示了 frozenset 的用法:

s = {
'Python', 'C', 'C++'}
fs = frozenset(['Java', 'Shell'])
s_sub = {
'PHP', 'C#'}
#向set集合中添加frozenset
s.add(fs)
print('s =', s)
#向為set集合添加子set集合
s.add(s_sub)
print('s =', s)

運行結果:

s = {
'Python', frozenset({
'Java', 'Shell'}), 'C', 'C++'}
Traceback (most recent call last):
File "C:\Users\mozhiyan\Desktop\demo.py", line 11, in <module>
s.add(s_sub)
TypeError: unhashable type: 'set'

需要注意的是,set 集合本身的元素必須是不可變的, 所以 set 的元素不能是 set,只能是 frozenset。第 6 行代碼向 set 中添加 frozenset 是沒問題的,因為 frozenset 是不可變的;但是,第 10 行代碼中嘗試向 set 中添加子 set,這是不允許的,因為 set 是可變的。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved