set
和dict相似,也是一组key的集合,可是不存储value。因为key不能重复,set中没有重复的key。
建立一个set
建立set须要提供一个list做为输入集合。
s = set( [1,2,3,4] )
或
li = [1,2,3,4]
s = set( li )
set内的list中的元素顺序不表示set是有序的。
重复元素会被自动过滤。
添加元素到set中
add()
s.add('a')
list不能做为元素添加到set,会报错。由于list是可变对象。set与dict都不支持将可变对象做为key。
删除set中的元素
remove()
s.remove(4)
一次只能remove一个元素。
set能够看作是一个数学意义上的集合,所以多个set之间能够作数学意义上的交集并集操做。
>>> s1 = set( [1,2,4,8,10,28] )
>>> s2 = set( [2,4,6,8,10,12] )
>>> s1 & s2
{8, 2, 10, 4} #交集
>>> s1 | s2
{1, 2, 4, 6, 8, 10, 12, 28} #并集
不可变对象
在此先引入一个新函数 replace()
a='abc'
a.replace('a','A')
以前例子里讲,str、int等类型数据都是不可变对象,那么,若是对这些不可变对象进行replace操做,这些对象是否是已经再也不“不可变”了呢?
>>> a = 'abc'
>>> a.replace('a','BBBBBB')
'BBBBBBbc'
实际上, replace以后,再进行print(a) ,会发现 对象(变量)a的值依然是 abc,也就是说,对象a实际上也是一个变量,只不过对象a指向的内容才是str 'abc' , replace以后其实是新建了一个新的变量,能够经过下面的逻辑来解释这个现象:
>>> a ='abc' >>> print(a) abc >>> b = a.replace('a','HHHHH') >>> print(b) HHHHHbc >>> print(a) abc 因此,对于不可变对象来讲,调用对象的任意方法都不会改变对该对象自身的内容,仅仅会建立新的对象并返回,这样就保证了不可变对象自己是永远不可变的。