day06

                                               第六天的学习总结

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_set
print(res)
res = p_set.intersection(l_set)
print(res) # {'egon'}

# 并集
res = p_set | l_set
print(res)
res = p_set.union(l_set)
print(res) # {'z', 'c', 'y', 'x', 'b', 'a', 'egon'}

# 差集
res = p_set - l_set
print(res) # {'a', 'b', 'c'}
res = l_set.difference(p_set)
print(res) # {'x', 'z', 'y'}

# 对称差集
res = p_set ^ l_set
print(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) # False
print(temp_set == sub_set) # True
# 两个set是否没有交集
res = flag_set.isdisjoint(temp_set) # True

原文地址:https://www.cnblogs.com/WBaiC1/p/10730002.html