最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的set可變集合與frozenset不可變集合的終極指南

 更新時間:2026年02月12日 08:55:44   作者:郝學(xué)勝-神的一滴  
這篇文章主要為大家詳細(xì)介紹了Python中set與frozenset的區(qū)別與應(yīng)用,set是可變集合,支持增刪元素和自動去重,frozenset是不可變集合,下面小編就來和大家詳細(xì)介紹一下吧

一、為什么你需要了解集合

你是否遇到過需要快速去重、判斷元素是否存在,或者進(jìn)行集合運算(如并集、交集)的場景?Python中的setfrozenset正是為解決這類問題而生的利器。本文將帶你徹底理解它們的區(qū)別、原理和實戰(zhàn)應(yīng)用。

二、核心概念解析

1.set(可變集合)

# 創(chuàng)建方式
my_set = {1, 2, 3}  # 注意:空集合必須用set(),因為{}表示空字典
print(type(my_set))  # <class 'set'>

# 特性驗證
print(1 in my_set)  # True(O(1)時間復(fù)雜度)

關(guān)鍵特性

  • 元素唯一性(自動去重)
  • 無序存儲(不能通過索引訪問)
  • 支持增刪(add(), remove()

2.frozenset(不可變集合)

# 創(chuàng)建方式
frozen = frozenset([1, 2, 2, 3])  # 輸入可迭代對象
print(frozen)  # frozenset({1, 2, 3})

# 嘗試修改會報錯
frozen.add(4)  # AttributeError

不可變性的意義

  • 可哈希(可作為字典鍵或集合元素)
  • 線程安全
  • 適合作為常量配置

三、底層原理揭秘

哈希表實現(xiàn)

兩種類型均基于哈希表實現(xiàn),這使得:

  • 查找操作時間復(fù)雜度為O(1)
  • 元素必須為可哈希類型(如數(shù)字、字符串、元組,但列表不行)
# 哈希沖突示例
print(hash(1))      # 1
print(hash(1.0))    # 1 (相同哈希值但不同元素)

內(nèi)存占用對比

通過sys.getsizeof()測試:

元素數(shù)量set內(nèi)存frozenset內(nèi)存
0216216
10003299232992

注:雖然內(nèi)存占用相同,但frozenset因不可變性更節(jié)省后續(xù)操作開銷

四、實戰(zhàn)場景對比

場景1:去重處理

# 快速去重(比列表推導(dǎo)更快)
data = [1, 2, 2, 'a', 'a']
unique = list(set(data))  # [1, 2, 'a']

場景2:作為字典鍵

# 只有frozenset可用作鍵
valid_dict = {frozenset({1,2}): "value"}  
invalid_dict = {{1,2}: "value"}  # TypeError

性能測試(100萬次操作)

操作set時間frozenset時間
創(chuàng)建0.12s0.15s
成員檢測0.08s0.07s
并集運算0.21s0.22s

五、高級技巧與坑點

1. 集合推導(dǎo)式

# 類似列表推導(dǎo)式
squares = {x**2 for x in range(10) if x%2==0}

2. 常見坑點

# 陷阱1:可變元素
try:
    {{1,2}: "value"}  # 報錯:set不可哈希
except TypeError as e:
    print(e)

# 陷阱2:空集合歧義
empty_set = set()  # 正確
not_a_set = {}     # 這是空字典!

3. 集合運算可視化

A = {1, 2, 3}
B = {2, 3, 4}

print(A | B)  # 并集 {1,2,3,4}
print(A & B)  # 交集 {2,3}
print(A - B)  # 差集 {1}

六、最佳實踐建議

選擇依據(jù)

  • 需要修改 → set
  • 需要哈希 → frozenset

性能優(yōu)化

  • 大數(shù)據(jù)集去重優(yōu)先用set
  • 頻繁查詢時轉(zhuǎn)換為集合

特殊應(yīng)用

# 利用集合快速判斷子集
permissions = {'read', 'write'}
required = {'read'}
print(required.issubset(permissions))  # True

七、擴(kuò)展思考

  • 為什么Python沒有frozendict
  • 如何實現(xiàn)有序集合?(提示:collections.OrderedDict

以上就是Python中的set可變集合與frozenset不可變集合的終極指南的詳細(xì)內(nèi)容,更多關(guān)于Python set和frozenset用法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

德清县| 黄浦区| 沅陵县| 益阳市| 乾安县| 大冶市| 礼泉县| 阿拉善盟| 霍山县| 冷水江市| 贵德县| 杭锦后旗| 永丰县| 芜湖县| 南平市| 兴国县| 余干县| 靖宇县| 陇西县| 阳曲县| 综艺| 八宿县| 田东县| 织金县| 金门县| 额敏县| 县级市| 绥宁县| 顺平县| 英德市| 莒南县| 左云县| 铜鼓县| 汕尾市| 大竹县| 高平市| 新余市| 张家界市| 鸡泽县| 涟水县| 大冶市|