基本数据-集合,小数据池,深浅copy
1.集合的创建:
# set1 = set({1, 3, 'Barry', False}) # set1 = {1, 3, '太白金星', 4, 'alex', False, '武大'} # print(set1)
2.集合的增,删
set1 = {'太白金星', '景女神', '武大', '三粗', 'alexsb', '吴老师'} # 增: # add set1.add('xx') print(set1) #{'三粗', '景女神', '太白金星', '武大', '吴老师', 'alexsb', 'xx'} # update迭代着增加 set1.update('fdsafgsd') print(set1)# {'太白金星', '三粗', 'a', 'd', '吴老师', '武大', 'g', '景女神', 's', 'f', 'alexsb'}
# 删 set1 = {'太白金星', '景女神', '武大', '三粗', 'alexsb', '吴老师'} #remove remove 按照元素删除 set1.remove('alexsb') # pop 随机删除 set1.pop() print(set1)
3.关系测试:
# 交集 set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} print(set1 & set2) #{4, 5} # 并集: print(set1 | set2) #{1, 2, 3, 4, 5, 6, 7, 8} # 差集 - print(set1 - set2) #{1, 2, 3} # 反交集 print(set1 ^ set2) #{1, 2, 3, 6, 7, 8} # 子集 set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1 < set2) True # # 超集 print(set2 > set1) True
3.集合的列表去重
l1 = [1,'太白', 1, 2, 2, '太白',2, 6, 6, 6, 3, '太白', 4, 5, ] set1 = set(l1) l1 = list(set1) print(l1) #[1, 2, 3, 4, '太白', 6, 5]
4.is id == 三种的区别
# == 比较的是两边的值是否相等 # l1 = [1, 2, 3] # l2 = [1, 2, 3] # print(l1 == l2) # id 是内存地址 # i = 100 # s = 'alex' # print(id(i)) # print(id(s)) # is 判断的是内存地址是否相同 # l1 = [1, 2, 3] # l2 = [1, 2, 3] # print(id(l1)) # print(id(l2)) # print(l1 is l2)
5.深浅COPY
总得一句话: 浅copy:list,dict 嵌套的可变数据类型是同一个 深copy:list,dict嵌套的可变的数据类型不是同一个 # 浅copy l1 = [1, 2, 3, [22, 33]] l2 = l1.copy() l1.append(666) print(l1,id(l1)) #[1, 2, 3, [22, 33], 666] 4805704 print(l2,id(l2)) #[1, 2, 3, [22, 33]] 6881608 可得知:不可变的数据类型.直接增加,l2也不会有变化. l1 = [1, 2, 3, [22, 33]] l2 = l1.copy() l1[-1].append(666) print(l1) #[1, 2, 3, [22, 33, 666]] print(l2) #[1, 2, 3, [22, 33, 666]] 因为最后一个嵌套列表是可变的.l2拷贝了l1的所有值.当l1的可变的数据类型增加一个数值时,,l2也是会跟着改变 # 深copy 需要增加import copy模块 深copy时,可变的数据类型是单独的.不会改变 # 深copy import copy l1 = [1, 2, 3, [22, 33]] l2 = copy.deepcopy(l1) # print(id(l1)) # print(id(l2)) l1[-1].append(666) print(l1) # [1, 2, 3, [22, 33, 666]] print(l2) # [1, 2, 3, [22, 33]] 可以看到.跟浅copy不同.浅copy是会跟l1一样..深copy不受l1影响