1.集合
1.1集合的形式
1 s = set("cccdfed")
2 print(s)
结果为:{'d', 'e', ' ', 'f', 'c'} 可以总结出:1 打印的是无重复的 2 内容时可hashed的 3 无序的 4 set本身的是不可hashed 5 set中只能是一个数据类型 若是有多个以列表等形式表现。
1.2一般操作
1 print("ccc" in s1) # 判断T OR F
2 s1.add("sb") # 添加到里面 {'ccc', 'sb', 'hesa'}
3 s1.update("dee") # {'ccc', 'd', 'hesa', 'e', 'sb'} 一个一个字母 会去重复
4 s1.remove("ccc") # 删除
5 s1.pop() # 删除 并返回
6 s1.clear()
1.3特殊操作
1.3.1交集
1 a = set([1,2,3,4])
2 b = set([3,4,5,6])
3 print(a.intersection(b)) #{3, 4}
4 print(a & b)
1.3.2并集
1 print(a.union(b)) # {1, 2, 3, 4, 5, 6}
2 print(a | b)
1.3.3补集
1 print(a.difference(b)) #{1, 2}
2 print(a - b)
3 print(b.difference(a)) #{5, 6}
4 print(b - a)
5 print(a.symmetric_difference(b)) # {1, 2, 5, 6}
1.4总结
(1) 与列表的不同在于:列表是有序的,集合是无序的。列表中可以放置其他变量,集合中不能。
(2) 与元组的不同在于:元组是不可修改的,集合中的可以修改。
(3) 通过对集合的学习可以看到集合更在与整体处理上有着明显的优势,通过对集合的特殊操作可以进行查重等。集合的出现弥补了列表字典的整体处理的缺陷。
(4)上述集合都是可变集合。
2.深浅拷贝
2.1浅拷贝
1 s = [[1,2],"alex","ccc"]
2 s1 = s.copy()
3 s1[2] = "linux"
4 print(s)
5 print(s1)
6 s1[0][1] = 3
打印结果为:s [[1,2],"alex","ccc"]
s1 [[1,2],"alex","Linux"]
在第六行中修改了s1中列表中的列表的信息,s也会受到影响。这其中道理涉及到内存的理解。先看图理解:
其中b浅拷贝于a。两者的储存效果如图。
可以看到的是b在改变的0088地址的时候将小列表的地址改变,a同时又受到了影响。这种影响可以是积极的也可以是无用的。
2.2深拷贝
1 import copy
2 s = [[1,2],3,4]
3 s1 = copy.deepcopy(s)
4 s1 [0][1] = 666
5 print(s)
6 print(s1)
这种拷贝方式会完全将两者分离,双方之间没有影响。