一.深浅拷贝
1.使用函数:
列表名.copy() #eg:s2=s1.copy
2.深拷贝:
深拷贝新旧内容储存空间互相独立
eg:s1=[1,2,3] s2=[1,2,3]
3.浅拷贝:
浅拷贝新旧内容共享储存空间,指针指向同一内容。对单个元素的修改仅体现在该列表上,对列表元素的修改体现在新旧列表上。
eg:a=[[1,2],3,4] b=a.copy() (或者写b=a[:])
修改:b[0][0]=8
此时a、b都会改变,因为直接修改了内存中的内容和指针
二.集合
1.集合是一个无序的,不重复的数据组合
2.主要作用:
(1)去重,把一个列表变成集合,就自动去重了 #eg:s=list(set(s))
(2)关系测试,测试两组数据之前的交集、差集、并集等关系
3.概念:
(1)集合元素(set elements):组成集合的成员(不可重复)
(2)集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键(如果列表中又包含列表,则不可用set转为集合,如s1=[[1,2],3])
4.集合分类:
(1)可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素
(2)不可变集合(frozenset):与上面恰恰相反
5.集合的相关操作:
(1)创建集合:由于集合没有自己的语法格式,只能通过集合的工厂方法set()和frozenset()创建
若s=set('zhou'),即字符串形式,则输出s为{'z','h','o','u'};若s=set['zhou','boy'],即列表形式,则输出s为{'zhou','boy'}
(2)访问集合:由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素
(3)更新集合:
可使用以下内建方法来更新:
s.add() #注意,add里的内容作为一个元素添加进去,如果是字符串,不会拆分
s.update() #注意,update里的内容作为一个序列添加进去,如果是字符串,会拆分
s.remove()
注意:只有可变集合才能更新
(4)删除集合:del
6.集合类型操作符
(1)in ,not in
(2)集合等价与不等价(==, !=)
(3)子集(用<表示包含关系,不包含自身)、超集(A是B的子集,则B是A的超集)
(4)并集(|):等价方法是union(),与集合or操作等价,a.union(b)表示a、b中所有元素的集合(不重复)
(5)交集(&):等价方法是intersection(),与集合and操作等价,a.intersection(b)表示a、b共有的部分
(6)差集(-):等价方法是difference(),a.difference(b)表示a中去掉a、b共有的部分
(7)对称差集(^):等价方法是symmetric_difference(),表示a、b中非共有部分