基本数据类型补充以及深浅拷贝
Posted guchenxu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本数据类型补充以及深浅拷贝相关的知识,希望对你有一定的参考价值。
一、基本数据类型补充
1.join()
使用前面的字符串对后面的列表进行拼接,拼接的结果是一个字符串
lst = ["alex", "dsb", "wusir", "xsb"] s = "_".join(lst) print(s)
把字符串转化成列表:split()
把列表转化成字符串:join()
print("*".join("周润发")) # 用迭代的方式进行的拼接
2.关于删除
列表删除
lst = ["篮球", "排球" ,"足球", "电子竞技", "台球"] lst.clear() ##除了这种删除方法还有一种
循环新列表删除老列表
lst = ["篮球", "排球" ,"足球", "电子竞技", "台球"] # # 最合理的删除方式: # # 1. 把要删除的内容写在新列表中. # # 2. 循环这个新列表. 删除老列表 # # # 需求: 删除列表中代球字的运动项目 new_lst = [] for el in lst: if "球" in el: new_lst.append(el) # 记录要删除的内容 # # 要删除的列表 print(new_lst) # # 循环新列表. 删除老列表 for el in new_lst: # [‘篮球‘, ‘排球‘, ‘足球‘, ‘台球‘] lst.remove(el) print(lst)
字典删除
字典在被循环的时候不能删除的
# # 把要删除的key保存在一个新列表中 # # 循环这个类表.删除字典中的key:value lst = [] for k in dic: lst.append(k) # # 循环列表 # # 删除字典中的内容 for el in lst: dic.pop(el) print(dic)
集合和字典是一家人
集合:元素必须是不可变的,可hash的,不重复
字典:key必须是不可变的,可hash的,不重复
dic = {"韦一笑":"青翼蝠王", "韦一笑":"张无忌"} dic[‘韦一笑‘] = "应天正" # 修改 print(dic)
fromkeys()帮我们创建字典用的,把第一个参数进行迭代. 拿到每一项作为key和后面的value组合成字典。例如:(大坑)
d = dict.fromkeys("张无忌", "赵敏") # 创建字典 print(d)
坑爹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、= 没有创建对象,只是把内存地址进行了复制
我把list1增加了一个元素"葫芦娃",lst2也增加了
lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"] lst2 = lst1 # 并没有产生新对象. 只是一个指向(内存地址)的赋值 print(id(lst1)) print(id(lst2)) # lst1.append("葫芦娃") print(lst1) print(lst2)
拷贝,抄作业,可以帮我们创建新的对象,和原来长的一模一样,浅拷贝
lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"] lst2 = lst1.copy() # 拷贝, 抄作业, 可以帮我们创建新的对象,和原来长的一模一样, 浅拷贝 # print(id(lst1)) print(id(lst2)) # lst1.append("葫芦娃") print(lst1) print(lst2)
但是浅拷贝遇到下面的这种情况就不好用了,浅拷贝只能拷贝第一层内容
lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]] lst2 = lst1.copy() # 浅拷贝. 只拷贝第一层内容 # print(id(lst1)) print(id(lst2)) # print(lst1) print(lst2) # lst1[4].append("葫芦娃") print(lst1) print(lst2)
接下来就需要我们的深拷贝了
deepcopy 深拷贝:对象内部的所有内容都要复制一份,深度克隆,原型模式
首先导入一个模块
# 首先引入一个模块 import copy lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]] lst2 = copy.deepcopy(lst1) # 深拷贝: 对象内部的所有内容都要复制一份. 深度克隆(clone). 原型模式 print(id(lst1)) print(id(lst2)) print(lst1) print(lst2) lst1[4].append("葫芦娃") print(lst1) print(lst2)
为什么要有深浅拷贝?
1.提高创建对象的速度
2.计算机中最慢的,就是创建对象,需要分配内存。
3.最快的方式就是二进制流的形式进行复制,速度最快!
以上是关于基本数据类型补充以及深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章
巨蟒python全栈开发-第7天 基本数据类型补充&深浅拷贝