day7数据类型的小缺陷、集合增删改查,深浅copy
day7内容总结
- 元组,列表,字典的小缺陷
- 集合的增删查,以及其他方法
- 各种数据类型的转化,集合的操作
- 深浅copy
1.元组
元组只有一个元素时,”元组“的数据类型以该元素为准,如果不是元组数据,则可修改
tu = ([1,2,3]),
print(tu)#tu是列表数据类型
解决方法:加逗号tu =([1,2,3],)
列表用索引迭代循环(可以用for循环时没有影响)时,最好不要修改列表长度,改变长度会改变索引,会影响结果或报错
如删除列表中索引为奇数的数据,
解决方法:不用循环del切片删除,用循环按索引从后往前删除,for i in range(len(li)-1,-1,-2)注意加反向步长
字典迭代循环自身或循环dict.key().dict.values(),dict.items()时最好也不要改变改变字典长度,会影响结果或报错
解决方法:将keys(),values(),items()通过list()括起来改为列表,循环列表的同时,对字典的的值进行修改
2.集合的增删查以及其他方法
集合:存放无序的不重复的数据,集合本身是不可哈希,可变的类型,但只能存放不可变可哈希的数据类型(int,bool,str,tuple)
主要用于除重(将列表转化为集合,去掉里面的重复元素,再将集合转化为列表),和判断集合关系,集合和字典都是用{},空{}表示字典,创建空集合要用set()方法,set1 = set()
增:add()方法,set.add()方法,
update()方法.set.update(可迭代对象),将对象迭代添加进集合
删:按元素删,remove(元素),
随机删除pop()有返回值,返回被随机删除的数据
clear()清空集合
del set1内存级别删除
查:for循环遍历
其他方法:frozenset(可迭代对象)方法,用可迭代对象创建一个新集合,冻结为不可变的frozenset类型的数据
s1 = frozeset("abc"),print(s1),#结果显示为:frozenset({"a","b","c"})
3.各种数据类型的转化,集合的操作
元组,列表,集合,可以通过list(),tuple(),set()括起来任意转化
元组,列表,集合,不可转化为字典
字典可以转化为元组,列表,集合,只提取key值
字典,元组,列表转化为集合时必须时不可变可哈希的数据类型,转化为集合后自动去掉重复元素,再转回时不会恢复
元组,字典,列表,集合,字符串都是可迭代对象,可通过可迭代对象进行多变量赋值,其中字符串赋值的数据类型只能是字符串
集合
交集,用&表示
并集,用|表示
差集,-,set1-set2,除掉set1中的两个集合的交集
反交集,用^表示,两集合的并集除掉两集合的交集
子集、超集的判断方法
<,issubset()方法
>,issuperset()方法
4.=与深浅copy
变量1=变量2,变量1,2指向相同内存地址,修改一个,另一个随之变化
变量1 = value,变量2 = value,有小数据池的指向相同内存地址,没小数据池的指向不同的内存地址
小数据池,为节省内存,将部分整型的字符串型数据划入小数据池,小数据池的数据,值相等时共用一个内存地址
整型:-5到256
字符串类型:两种,字母和数字的任意组合有小数据池,有特殊字符的没有小数据池
单个字母*n,n<=20时有小数据池
浅copy(元组,列表,字典,集合)
浅copy第一层指向不同的内存地址,复制当前值,第二层及更深层,指向相同的内存地址,保持一致性,修改第一层时不会随之变化,第二层往下会随之变化
深copy,两个数据完全独立,互不影响,deepcopy需要引入copy模块,写法如下
import copy
l1 = [1,2,3,4]
l2 = copy.deepcopy(l1)
print(l2)

浙公网安备 33010602011771号