Python基础七(深浅copy以及int,str,tuple,list,dic补充)
一:int,str,tuple,list,dic之间的转换及其补充
1.转换
1)int与str的转换
int ----> str str(int)
str ----> int int(str) 条件:全部由数字组成的字符串可以转化成数字
2)int与bool的转换
int ----> bool 非0是True 0是False
bool----> int True是1 False是0
3)str与bool的转换
str ----> bool 非空是True 空('')是False bool----> str 'True' 'False'
4)str与list的转化
str ----> list split() ()里有没有内容整个变成列表,()里有内容按内容分割成列表内元素,且()里内容不存在 例如: s = 'alex,wusir,taibai' l1 = s.split() print(l1) 输出结果:['alex,wusir,taibai'] l2 = s.split(',') print(l2) 输出结果:['alex', 'wusir', 'taibai'] l3 = s.split('a') print(l3) 输出结果:['', 'lex,wusir,t', 'ib', 'i'] list ----> str 用 ''.join() 例如: li = ['alex','wusir','taibai'] s1 = ''.join(li) print(s1) 输出结果:alexwusirtaibai s2 = '_'.join(li) print(s2) 输出结果:alex_wusir_taibai
5)list与tuple的转换 (与int和str之间的转换相似)
tu = (1,2,3,{},[]) l1 = list(tu) print(l1) 输出结果:[1, 2, 3, {}, []] li = [1,2,3,{},()] t1 = tuple(li) print(t1) 输出结果:(1, 2, 3, {}, ())
6)dic的特有类型与list的转换
dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'} print(dic.keys()) 输出结果:dict_keys(['k1', 'k2', 'k3', 'name']) print(list(dic.keys())) 输出结果:['k1', 'k2', 'k3', 'name'] print(dic.values()) 输出结果:dict_values(['alex', '太白', '日天', 'wusir']) print(list(dic.values())) 输出结果:['alex', '太白', '日天', 'wusir'] print(dic.items) 输出结果:不能这样写,需要两个变量接收 print(list(dic.items())) 输出结果:[('k1', 'alex'), ('k2', '太白'), ('k3', '日天'), ('name', 'wusir')]
2.tuple的补充
当元组只有一个元素组成并且没有逗号,则该元素是什么数据类型,整体就是什么数据类型.
tu = ([1,2,3]) tu1 = ([1,2,3],) print(tu,type(tu)) 输出结果:[1, 2, 3] <class 'list'> print(tu1,type(tu1)) 输出结果:([1, 2, 3],) <class 'tuple'> tu.append('333') print(tu,type(tu)) 输出结果:[1, 2, 3, '333'] <class 'list'>
3.list以及dic的删除
1)list的删除(用for循环时索引值在变化直接删除会报错)
li = [111,222,333,444,555] #将索引为奇数位的元素删除. # 第一种: del li[1::2] print(li) # 第二种: li = [111,222,333,444,555] l2 = [] for i in range(len(li)): if i % 2 == 0: l2.append(li[i]) li = l2 print(li) # 第三种: li = [111,222,333,444,555] for i in range(len(li)-1,0,-1): #倒着删除的时候索引不会发生变化,所以不会报错 if i % 2 == 1: del li[i] print(li)
2)dic的删除
不可变的数据类型:可哈希
dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'} #删除含'k'元素的键值对 li = [] for k in dic: if 'k' in k: li.append(k) #把dic的keys添加到列表中再去删除 for i in li: del dic[i] print(dic)
4.fromkeys()的用法
fromkeys() dic = dict.fromkeys('abc','alex') print(dic) dic中的keys(字符串)中的元素迭代增加成新的键key,value值不变化 输出结果:{'a': 'alex', 'b': 'alex', 'c': 'alex'} dic1 = dict.fromkeys([1,2,3],[]) print(dic1) dic中的keys(列表)中的元素 迭代增加成新的键key,value值不变 输出结果:{1: [], 2: [], 3: []} dic1[1].append('alex') print(dic1) dic中迭代增加后一个value变化,其他的value值对应变化成该值 输出结果:{1: ['alex'], 2: ['alex'], 3: ['alex']}
二.list深浅拷贝
1.赋值运算
比较下面两个 l1 = [1,2,3,4,'5'] l2 = l1 l1 = [1,2,3,4,'5',6] print(l1) 输出结果:[1, 2, 3, 4, '5', 6] print(l2) 输出结果:[1, 2, 3, 4, '5'] l1 = [1,2,3,4,'5'] l2 = l1 对于赋值运算,就是指向同一内存地址 l1.append(6) print(l1) 输出结果:[1, 2, 3, 4, '5', 6] print(l2) 输出结果:[1, 2, 3, 4, '5', 6]
2.浅拷贝
第一种: l1 = [1,2,3,4,'5'] l2 = l1.copy() l1.append(6) print(l1) 输出结果:[1, 2, 3, 4, '5', 6] print(l2) 输出结果:[1, 2, 3, 4, '5'] 第二种 l1 = [1,2,3,[6,7,8],4,'5'] l2 = l1.copy() #补充:l2 = l1[:](相当于浅拷贝) l1[3].append('9') print(l1) 输出结果:[1, 2, 3, [6, 7, 8, '9'], 4, '5'] print(l2) 输出结果:[1, 2, 3, [6, 7, 8, '9'], 4, '5'] 对于浅copy来说,第一层都是独立的内存地址,从第二层开始,都是指向同一个内存地址,一变都变.
3.深拷贝
import copy l1 = [1,2,3,[6,7,8],4,'5'] l2 = copy.deepcopy(l1) l1.append('0') l1[3].append('9') print(l1) 输出结果:[1, 2, 3, [6, 7, 8, '9'], 4, '5', '0'] print(l2) 输出结果:[1, 2, 3, [6, 7, 8], 4, '5'] 对于深copy,无论多少层,在内存中都是两个独立的内存地址.
三.dic的深浅拷贝(与list的深浅拷贝类似)
1.浅拷贝
#第一种 dic1 = {1:'alex',2:['a','b'],3:('c','d')} dic2 = dic1.copy() dic1[1] = 'taibai' print(dic1) 输出结果:{1: 'taibai', 2: ['a', 'b'], 3: ('c', 'd')} print(dic2) 输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd')} #第二种 dic1 = {1:'alex',2:['a','b'],3:('c','d'),4:{'name':'zhu','age':18}} dic2 = dic1.copy() dic1[4]['name'] = 'taibai' print(dic1) 输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'taibai', 'age': 18}} print(dic2) 输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'taibai', 'age': 18}}
2.深拷贝
import copy dic1 = {1:'alex',2:['a','b'],3:('c','d'),4:{'name':'zhu','age':18}} dic2 = copy.deepcopy(dic1) dic1[1] = 'taibai' dic1[4]['name'] = 'wusir' print(dic1) 输出结果:{1: 'taibai', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'wusir', 'age': 18}} print(dic2) 输出结果:{1: 'alex', 2: ['a', 'b'], 3: ('c', 'd'), 4: {'name': 'zhu', 'age': 18}}