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
所以,对于不可变对象来说,调用对象的任意方法都不会改变对该对象自身的内容,仅仅会创建新的对象并返回,这样就保证了不可变对象本身是永远不可变的。