一, 深度拷贝:
(一般了解)
1, 浅拷贝:
- s=[[1,2],'alex','asada']
- s2=s.copy()
- print(s2)
- s2[0][1]=3
- print(s2)
- print(s)
从该程序中可知, 当第二层列表中元素被修改后, 原列表内容也发生变化, 这是因为元素修改, 改变了列表指针, 使得 s 列表 s[0]元素指向元素发生变化. 如图所示:
修改列表后, 原列表发生变化(原因: a 列表指针发生变化, 造成原列表中列表数据变化)
浅拷贝: 只拷贝第一层
深拷贝: 全部拷贝
- s3=[1,'alex','asada']
- s4=s3.copy()
- s4[0]=2
- print(s4)
- print(s3)
2, 深度拷贝:
- import copy
- s=[[1,2],'alex','asada']
- s2=copy.deepcopy(s)# 深拷贝操作
- print(s2)
- s2[0][1]=3
- print(s2)
- print(s)
注意: 深度拷贝操作后, 即使新列表第二层被修改, 原列表依然不变.
二, 集合:
1, 创建方法:
- set() ,frozenset()
- s=set('alex li')
- print(s,type(s))
集合可将重复元素去除, 数据类型为 set
注: 集合对象是一组无序排列可 hash 的值, 集合成员可以做字典的键
2, 访问集合: 由于集合本身是无序的, 所以不能为集合创建索引或切片操作, 只能循环遍历或使用 in,not in 来访问或判断集合元素.
3, 更新集合:
- s.add() s.update() s.remove()
- s2=set('alvin')
- s2.add('mm')
- print(s2) #{'mm', 'l', 'n', 'a', 'i','v'}
- s2.update('HO')# 添加多个元素
- print(s2) #{'mm', 'l', 'n', 'a', 'i', 'H', 'O', 'v'}
- s2.remove('l')
- print(s2) #{'mm', 'n', 'a', 'i', 'H', 'O', 'v'}
del: 删除集合本身
4, 集合类型操作符:
1,in not in
2, 集合等价于不等价(==,!=)
3, 子集, 超集
- s=set('alvinyuan')
- s1=set('alvin')
- print('v' in s)
- print(s1<s)#True-------------s1 是 s 的子集
4, 联合 (|): 联合(union) 操作与集合的 or 操作其实等价的, 联合符号有个等价的方法, union(). 并集操作
- s1=set('alvin')
- s2=set('yuan')
- s3=s1|s2
- print(s3) #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}
- print(s1.union(s2)) #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}
5, 交集(&): 与集合 and 等价, 交集符号的等价方法是 intersection()
- s1=set('alvin')
- s2=set('yuan')
- s3=s1&s2
- print(s3)#{'n', 'a'}
- print(s1.intersection(s2)) #{'n', 'a'}
6, 差集(-): 等价方法是 difference()
- s1=set('alvin')
- s2=set('yuan')
- s3=s1-s2
- print(s3)#{'v', 'i', 'l'}
- print(s1.difference(s2)) #{'v', 'i', 'l'}
- s4=s2-s1
- print(s4)#{'y','u'}
- print(s2.difference(s1)) #{'y','u'}
7, 对称差集(^): 对称差分是集合的 XOR('异或'), 取得的元素属于 s1,s2 但不同时属于 s1 和 s2. 其等价方法 symmetric_difference()
- s1=set('alvin')
- s2=set('yuan')
- s3=s1^s2
- print(s3) #{'l', 'v', 'y', 'u', 'i'}
- print(s1.symmetric_difference(s2)) #{'l', 'v', 'y', 'u', 'i'}
来源: http://www.bubuko.com/infodetail-3035009.html