python集合深浅copy
01昨天内容回顾
代码块:由一个文件,一个函数,一个模块,一个类,交互模式下每一行都是一个代码块
Is == id:id()是查询内存地址,==比较两边的值,is是比较两边的内存地址。
小数据池:
在内存中创建一个池,提前存放了-5~256的整数,一定规则的字符串,后续程序中,如果设置的变量指向的是小数据内容,那就不会再内存中重新创建。
1.节省内存
2.提高性能和效率。
小数据池和代码块的关系。
同一个代码块:python在执行时,遇到了初始化对象,他会将这个变量和数值放在一个字典中,再次遇到他会从这字典中寻找。
不同代码块:python执行中,直接从小数据池中寻找。满足条件id相同。
编码:
Str》bytes:encode
Bytes》str:decode
02作业讲解
03 基础数据类型补充
元祖:如果元祖中只有一个数据,且没有逗号,则还‘元祖‘与里面的数据的数据类型相同。Print()将会得到是属于元素的类型 ,得到的不是元祖。
Tu1=(1)
Print(tu1)得到的是元素
Tu1=(1,)
Tu2=(‘alex’,)
Tu3=(【1,2,3】,)
列表,元组,字符串互相转换
列表和元组转换为字符串则必须依靠join函数
列表:列表和列表可以相加
L1=【1,2,3】
L2=【‘alex’,‘wusir’】
L3=l1+l3
Print()
在循环一个列表时,如果对列表中的某些元素进行删除,
那么次元素后面的所有元素就会前进一位,他们索引位置 就会变,所以不能在循环的时候,进行增删
Eg:# for i in range(len(li)-1,-1,-1):
# if i %2==1:
# li.pop(i)
# print(li)
字典
Dic1=dic.fromkeys([1,2,3],’alex’)
Print(dic1)
在循环一个字典时,不能改变字典的大小(就是不能增减)。
数据类型的转换。
Int str bool 转换
Str《》types
Str《》list:字符串转换列表时用split,而list转换为字符串时,必须list全是字符串。
04集合set
增:有add。update#update:迭代着增加
set1.update('A')print(set1)
set1.update('老师')print(set1)
set1.update([1,2,3])print(set1)
删:
set1 = {'alex','wusir','ritian','egon','barry'}
set1.remove('alex') # 删除一个元素print(set1)
set1.pop() # 随机删除一个元素print(set1)
set1.clear() # 清空集合print(set1)
del set1 # 删除集合print(set1)
Set:
{‘name’,‘alex’,1,2,3}
集合要求里面的元素必须是不可变的数据类型,但本身是可以变得,集合里面的元素不重复,无序。
主要用途:
- 去重,
- 关系测试。
List去重
li=[1,2,2,3,4,6,1,3,]
# set1=set(li)
# li=list(set1)
# # print(set1)
# print(li)
集合比如#
set1=set({1,2,3})
# set2=set1
# print(id(set1),id(set2))
地址是不一样的。
- 关系测试
交集&intersection
并集|union
差集—difference
反交集^ 或者 symmetric_difference
子集和超集
05 浅度copy
对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
l1 = [1,2,3,['barry','alex']]
l2 = l1.copy()
print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048
l1[1] = 222print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896
l1[3][0] = 'wusir'
print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
05 深度copy
对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变
import copy
l1 = [1,2,3,['barry','alex']]
l2 = copy.deepcopy(l1)
print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048
l1[1] = 222
print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048
l1[3][0] = 'wusir'
print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240
print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304