基本数据的补充、深浅拷贝

一.关于基本数据类型的补充:

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.最快的方式就是二进制流的形式进行复制,速度最快

 

posted @ 2018-12-05 09:08  Tank-Li  阅读(237)  评论(0编辑  收藏  举报