集合
集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:
去重,把一个列表变成集合,就自动去重了。
关系测试,测试两组数据之前的交集、差集、并集等关系。
1、集合的创建:
set1 = set({1,2,'barry'}) set2 = {1,2,'barry'} print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'}
2、集合的增加:
set1 = {'alex','wusir','ritian','egon','barry'} set1.add('景女神') print(set1) #update:迭代着增加 set1.update('A') print(set1) set1.update('老师') print(set1) set1.update([1,2,3]) print(set1)
3、集合的删除:
set1 = {'alex','wusir','ritian','egon','barry'} set1.remove('alex') # 删除一个元素 print(set1) set1.pop() # 随机删除一个元素 print(set1) set1.clear() # 清空集合 print(set1) del set1 # 删除集合 print(set1)
4、集合的交集(&或者intersection):
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 & set2) # {4, 5} print(set1.intersection(set2)) # {4, 5}
5、集合的并集(| 或者 union)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7} print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7}
6、集合的差集(- 或者 difference)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 - set2) # {1, 2, 3} print(set1.difference(set2)) # {1, 2, 3}
7、集合的反交集(^ 或者 symmetric_difference)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 ^ set2) # {1, 2, 3, 6, 7, 8} print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}
8、集合的子集与超集()
set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1 < set2) print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。 print(set2 > set1) print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
9、frozenset不可变集合,让集合变成不可变类型。
s = frozenset('barry') print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>
深拷贝浅拷贝
1、赋值运算
l1=[1,2,3,[4,5],6] l2=l1 print(l1) #[1, 2, 3, [4, 5], 6] print(l2) #[1, 2, 3, [4, 5], 6] l1[3].append(7) print(l1) #[1, 2, 3, [4, 5, 7], 6] print(l2) #[1, 2, 3, [4, 5, 7], 6]
可见,赋值运算为浅拷贝,l1与l2的内存地址相同
2,浅拷贝copy
l1=[1,2,3,[4,5],6]
l2=l1.copy()
print(l1,id(l1)) #[1, 2, 3, [4, 5], 6] 45586376
print(l2,id(l2)) #[1, 2, 3, [4, 5], 6] 45586184
l1[3].append(7)
print(l1,id(l1[3])) #[1, 2, 3, [4, 5, 7], 6] 41629832
print(l2,id(l2[3])) #[1, 2, 3, [4, 5, 7], 6] 41629832
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性
3,深拷贝deepcopy
import copy l1=[1,2,3,[4,5],6] l2=copy.deepcopy(l1) print(l1,id(l1)) #[1, 2, 3, [4, 5], 6] 45650632 print(l2,id(l2)) #[1, 2, 3, [4, 5], 6] 45651912 l1[3].append(7) print(l1,id(l1[3])) #[1, 2, 3, [4, 5, 7], 6] 45650440 print(l2,id(l2[3])) #[1, 2, 3, [4, 5], 6] 45651848
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。