今天接触到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'])
今天就简单学习到这里了,感觉很多细节的知识还是必须要去花点实践学习和掌握的。