第六天的学习总结
1,深度拷贝和浅拷拷贝
拷贝就是一个复制的过程,把一个值赋值给另一个值,这个是值的拷贝就是拷贝的地址,如果被拷贝的值有变化
那么拷贝的值就会变化所以说不是深度拷贝和浅拷贝,
什么是浅拷贝
浅拷贝就是在拷贝的过程,把所有的东西都复制过来了,就不会在变化了.除非在复制的过程中复制的有可变化的类型
那样,如果改变被复制的量中的可变类型,那么复制后的可变的类型就会发生变化.
例如:ls1=[1,2,3,4,5]
拷贝:ls2 = ls1.copy()
如果改变sl1中的[0] 为10 ==> ls1[0] = 10 那么sl2中的[0] 不会发生变化.如图
但是:ls1 = [1,2,3,4,5,[10,20]]
拷贝:ls2 = ls1.copy()
这样的话如果改变sl1中的[5] ===> ls1[5][0] = 100
那么sl2中的 ls2[5][0]值也会发生变化
这上面的两种改变,是因为第一种改变sl1中的值,它的值是变了,但是1这个值的地址是不会变的,所以ls2中的值不会变
第二种就是改变了 列表 中的值,意思就是把里边的地址给改变了
什么是深拷贝
from copy import deepcopy
deepcopy(变量名)
深拷贝的内容是不会发生变化的,
因为深拷贝的不变的量是和浅拷贝一样的,只是拷贝的可变的量的时候会强制开辟一个新的空间
保存这个可变的量.
所以说深拷贝,拷贝的量是不会跟着被拷贝的量的变化发生变化的.
元组类型
元组就是使用括号来表示,元组重要的就是两个方法
元组是可以存放所有类型的
常规操作
元组如果只存一个数据,那么(1,)必须要加逗号,不然就会认为是一个常量,不是元组
取值是通过索引来取值
拼接就是两个元组的相加,?
方法有
1.count(0) 这个方法是表示的是对象0 在元素中出现的次数
2.index(0,4,len(tl)) 对象0在区间4 到末尾出现的次数 如果没有就会报错
元组不可变的分析
a=(10,'abc',[100])
a[0] = 100 这种的方式不支持 不管是可变与不可变的类型都是不能被改变的
字典类型
字典就是一个容器,存放多个值的变量
在Python中
单列容器(list tuple)
双列容器(map) dict 只有一个双列容器,存储数据是成对出现 key -- value 存储方式
key 是取值的唯一性,key一旦被确定,就需要唯一确定(不能被改变)
字典中value是任意类型.其中key是不能被重复,重复后就会被覆盖.value可以为多个值
字典的定义
可以是空字典
d1 = {}
d2 =dict()
使用map映射创建字典
d3 = dict({"a":1,"b":2})
set
1.定义
s1 = set()s2 = set({1, 2, 3})2.重点:数据具有唯一性
# i) 单列数据集合:str,list,tuple,set 双列:dict# ii) 无序存储:无key无index,无法取值# iii) 可变数据类型,内部可以存放任意类型数据,但数据具有唯一性3.运算
p_set = {'a', 'b', 'c', 'egon'}l_set = {'x', 'y', 'z', 'egon'}# 交集 &
res = p_set & l_setprint(res)res = p_set.intersection(l_set)print(res) # {'egon'}# 并集
res = p_set | l_setprint(res)res = p_set.union(l_set)print(res) # {'z', 'c', 'y', 'x', 'b', 'a', 'egon'}# 差集
res = p_set - l_setprint(res) # {'a', 'b', 'c'}res = l_set.difference(p_set)print(res) # {'x', 'z', 'y'}# 对称差集
res = p_set ^ l_setprint(res)res = p_set.symmetric_difference(l_set)print(res) # {'y', 'a', 'b', 'x', 'z', 'c'}'''
'''
了解:sup_set = {1, 2, 3, 4, 5}sub_set = {1, 2, 3}temp_set = {3, 2, 1}flag_set = {7, 8, 9}print(sup_set > sub_set) # True
print(sup_set < sub_set) # Falseprint(temp_set == sub_set) # True# 两个set是否没有交集res = flag_set.isdisjoint(temp_set) # True