1. 程式人生 > >python set和frozenset 異同點學習記錄

python set和frozenset 異同點學習記錄

    今天接觸到set和frozenset的同時使用,之前對於二者的瞭解僅僅是停留在set是可變集合,frozenset是不可變集合,其他的也就沒有再記住什麼了,今天找時間簡單地來總結一下它們的異同點,也方便以後的學習和使用,下面是具體的實踐,具體的區別講解都在註釋中,就不再多解釋了:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division


'''
__Author__:沂水寒城
功能:python set和frozenset 異同點學習記錄
'''


'''
相同點:
都是集合
都擁有集合物件共有的操作,如union、intersection、difference和sysmmetric difference

不同點:
set是可變集合,frozenset是不可變集合
set中的元素可以修改,frozenset中的元素一旦建立完成獎就不能再進行增刪操作
set無hash值不可做字典中的鍵,因為它元素可變,frozenset有hash值,元素不可變古可用作字典中的鍵
'''


#工廠方法初始化建立兩個集合
set_=set('hangzhou')
print 'set_: ',set_
print 'type set_: ',type(set_)
frozenset_=frozenset('hangzhou')
print 'frozenset_: ',frozenset_
print 'type frozenset_: ',type(frozenset_)


#向集合中增加元素
try:
    tmp_list=['A','B','C','D']
    for one_item in tmp_list:
        set_.add(one_item)
    print 'set_: ',set_
    print 'type set_: ',type(set_)

    for one_item in tmp_list:
        frozenset_.add(one_item)
    print 'frozenset_: ',frozenset_
    print 'type frozenset_: ',type(frozenset_)
except Exception,e:
    print 'Add Exception: ',e


#從集合中移除指定元素
try:
    tmp_list=['B','D']
    for one_item in tmp_list:
        set_.remove(one_item)
    print 'set_: ',set_
    print 'type set_: ',type(set_)

    for one_item in tmp_list:
        frozenset_.remove(one_item)
    print 'frozenset_: ',frozenset_
    print 'type frozenset_: ',type(frozenset_)
except Exception,e:
    print 'Remove Exception: ',e


#並交差集合計算
print 'union: ',set_|frozenset_
print 'intersection: ',set_&frozenset_
print 'difference: ',set_-frozenset_
print 'sysmmetric difference: ',set_^frozenset_

結果如下:

set_:  set(['a', 'g', 'h', 'o', 'n', 'u', 'z'])
type set_:  <type 'set'>
frozenset_:  frozenset(['a', 'g', 'h', 'o', 'n', 'u', 'z'])
type frozenset_:  <type 'frozenset'>
set_:  set(['a', 'A', 'C', 'B', 'D', 'g', 'h', 'o', 'n', 'u', 'z'])
type set_:  <type 'set'>
Add Exception:  'frozenset' object has no attribute 'add'
set_:  set(['a', 'A', 'C', 'g', 'h', 'o', 'n', 'u', 'z'])
type set_:  <type 'set'>
Remove Exception:  'frozenset' object has no attribute 'remove'
union:  set(['a', 'A', 'C', 'g', 'h', 'o', 'n', 'u', 'z'])
intersection:  set(['a', 'g', 'h', 'o', 'n', 'u', 'z'])
difference:  set(['A', 'C'])
sysmmetric difference:  set(['A', 'C'])

    今天就簡單學習到這裡了,感覺很多細節的知識還是必須要去花點實踐學習和掌握的。