一.数据基本类型之set集合
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key
set集合,是一个无序且不重复的元素集合
1.创建
s = set() #创建空集合
s= {'values1','values2'} #非空集合
2.转换
l = [1,2,5,11]
t= (11,22,12)#元组转集合
st2 =set(t)#列表转集合
st =set(l)print(st)print(st2)
3.常用支持操作
添加元素-->add(key)
s = set()
s.add(1)
print(s)
删除元素-->remove(key)
s = set([1,2,3])
s.remove(1)print(s)
清除元素-->clear()
s = set([1,2,3,4,5])print(s)
s.clear()print(s)
比较元素-->difference()
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#set1中有而set2中没有的值
ret =set1.difference(set2)print(ret)
删除两集合中相同的元素-->difference_update()
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#从set1中删除和set2中相同的元素
set1.difference_update(set2)print(set1)print(set2)
移除元素-->discard(values)
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#移除指定元素,不存在不会报错,remove()不存在会报错,建议discard
set1.discard(44)print(set1)
取交集值-->intersection()
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#取两个set集合的交集值
ret =set1.intersection(set2)print(ret)
取交集并更新-->intersection_update()
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#取交集并更新到set1中
set1.intersection_update(set2)print(set1)
判断是否交集-->isdisjoint()
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#如果两个集合有交集返回false,反之返回true
print(set1.isdisjoint(set2))
子序列-->issubset()
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#判断是否是子集,是返回true,反之返回Flase
print(set1.issubset(set2))
父序列-->issuperset()
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#是否是父序列,是返回True,反之返回Flase
print(set1.issuperset(set2))
对称交集-->symmetric_difference()
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#对称交集,取两个集合中互不存在的元素,生成一个新的集合
ret =set1.symmetric_difference(set2)print(ret)
对称交集并更新-->symmetric_difference_update()
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#对称交集,并更新元素到set1中
set1.symmetric_difference_update(set2)print(set1)
并集-->union()
set1 = {1,44,87,23,55}
set2= {1,44,88,23,67}#并集并更新到新的集合中
ret =set1.union(set2)print(ret)
二.深浅拷贝
1.数字和字符串
对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址
importcopy########## 数字、字符串 #########
n1 = 123
#n1 = "i am alex age 10"
print(id(n1))### 赋值 ##
n2 =n1print(id(n2))### 浅拷贝 ##
n2 =copy.copy(n1)print(id(n2))### 深拷贝 ##
n3 =copy.deepcopy(n1)print(id(n3))
二,其他数据类型
对于list dict,tuple 浅拷贝只拷贝最外一层,深拷贝除了最后一层(因最后一层是字符串)其余的都拷贝
赋值
赋值,只是创建一个变量,该变量指向原来内存地址,如
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n2= n1
解析图如下:
浅拷贝
浅拷贝,在内存中只额外创建第一层数据
importcopy
n1= {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n3= copy.copy(n1)
解析图如下:
深拷贝:
深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)
importcopy
n1= {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n4= copy.deepcopy(n1)
解析图如下:
三.集合作业
1.寻找差异,并将new_dict的值更新到old_dict中
old_dict ={"#1":11,"#2":22,"#3": 100}
new_dict={"#1":33,"#4":22,"#7": 100}
#!/usr/bin/env python#-*- coding:utf-8 -*-
old_dict={"#1":11,"#2":22,"#3": 100}
new_dict={"#1":33,"#4":22,"#7": 100}
old_keys=old_dict.keys()
new_keys=new_dict.keys()
old_set=set(old_keys)
new_set=set(new_keys)#old存在new不存在,并删除new中不存在,old 中存在的元素
del_set =old_set.difference(new_set)for i indel_set:delold_dict[i]#new存在old不存在
add_set =new_set.difference(old_set)
for a inadd_set:
old_dict[a]=new_dict[a]#更新旧数据表
update_set =old_set.intersection(new_set)for u inupdate_set:
old_dict[u]=new_dict[u]print(old_dict)