基本数据的补充、深浅拷贝
一.关于基本数据类型的补充:
1."".join()方法 #把列表里字符串(必须全都是字符串才能用此方法)转换成一个字符串类型
li = ["我爱你1314","哈哈","呵呵"] a = "_".join(li) #把参数迭代,每个元素和前面的*进行拼接,得到的是字符串 print(a) 打印结果为:我爱你1314_哈哈_呵呵 #是一个字符串
2.split() #把字符串转换成列表
lst="我爱你1314_哈哈_呵呵" a = lst.split("_") print(a) 输出结果为:['我爱你1314', '哈哈', '呵呵'] #换成了列表
3.关于删除
在for循环中不要使用"方法"删除,有些删除方法(remove())会删不干净漏删,而且有些删除方法(del())还会报错
迭代删除有两种方法:
1)全部删除
for i in range(0,len(i)): #循环len(li)次,然后从后往前删除 li.pop() #因为是循环了这个列表的长度,所以都被准确删除 print(li)
2)精确删除,指定删除目标 li = [11, 22, 33, 44] del_li=[] #创建个空列表 for i in li: del_li.append(e) #将旧列表里想删除的值放到新列表里 for e in del_li: #迭代新列表 li.remove(e) #用新列表的元素,循环删除旧列表 print(li)
4.关于字典的fromkeys()方法
fromkeys(),可以帮我们通过list来创建一个dict
把第一个参数进行迭代,拿到每一项作为key和后面的value组成子典 dic = dict.fromkeys(["jay","JJ"],['周杰伦","麻花藤"]) print(dic) 结果:{'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}
--------------------------------------------
dic={'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}
dic.get("jay").append("胡⼤大")
print(dic)
结果: {'jay': ['周杰伦', '麻花藤', '胡⼤大'], 'JJ': ['周杰伦', '麻花藤', '胡⼤大']}
#代码中只是更改了jay那个列表. 但是由于jay和JJ指向的是同一个列表. 所以. 前面那个改了. 后面那个也会跟着改
如果非得想改单项,可以这样: dic={'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']} dic["jay"]="哈哈"#给它重新赋值,重新指向
关于fromkeys()方法的坑
# 坑1: 返回新字典. 和原来的字典没有关系 dic = {} d = dic.fromkeys("风扇哥", "很困") print(dic) # {} print(d)
输出结果为:{} {'风': '很困', '扇': '很困', '哥': '很困'} # 坑2: 如果value是可变的数据类型, # 那么其中一个key对应的value执行的更改操作. 其他的也跟着变 d = dict.fromkeys("胡辣汤", []) print(d) # {'胡': [], '辣': [], '汤': []} print(id(d['胡'])) print(id(d['辣'])) print(id(d['汤'])) d['胡'].append("河南特色") print(d) # {'胡': ['河南特色'], '辣': ['河南特色'], '汤': ['河南特色']}
二.深浅拷贝
1)浅拷贝
lst1 = ["你好","我好","大家好",["呵呵","哈哈"]] lst2 = lst1.copy() #copy的是第一层,并没有复制后独立存储,依然受到lst的影响. lst1[3].append("嘻嘻") print(lst1) print(lst2) 输出结果为:['你好', '我好', '大家好', ['呵呵', '哈哈', '嘻嘻']] ['你好', '我好', '大家好', ['呵呵', '哈哈', '嘻嘻']] #copy的只是第一层,并没有拷贝后独立存储,依然受到lst的影响.
2)深拷贝
引入一个cope模块的deepcopy()方法 import copy lst1 = ["你好","我好","大家好",["呵呵","哈哈"]] lst2 = copy.deepcopy(lst1) lst1[3].append("嘿嘿") #apeend()方法直接再原内容上改了,所以不写接收 print(lst1) print(lst2)
输出结果为:
['你好', '我好', '大家好', ['呵呵', '哈哈', '嘿嘿']]
['你好', '我好', '大家好', ['呵呵', '哈哈']]
深浅拷贝的作用
1.提高创建对象的速度
2.计算机中最慢的,就是创建对象,需要分配内存.
3.最快的方式就是二进制流的形式进行复制,速度最快