python的深浅拷贝以及fromkeys的用法
2018-12-06 07:34:36来源:博客园 阅读 ()
1.join()的用法:使用前面的字符串.对后面的列表进行拼接,拼接结果是一个字符串
# lst = ["alex","dsb",'wusir','xsb'] # s = "".join(lst) # print(s) #alexdsbwusirxsb
2.
split() 根据你给的参数进行切割,切割的结果就是列表
需要把字符串转换成列表 split
把列表转化为字符串 join
# s = "alex_dsb_wusir_xsb" # lst = s.split("_") #列表 # print(lst)
3.join的迭代拼接
# print("*".join("周润发")) #用迭代的方式进行拼接 # #周*润*发
4.删除操作
# lst = ["篮球","排球","乒乓球","足球","电子竞技","台球"] # for el in lst: # lst.remove(el) # print(lst)#['排球', '足球', '台球']
会发现删不干净 原因是:删除一个.元素的索引重新排序,for循环向后走一个,就漏掉一个
删掉了索引是0的元素,然后索引是1的元素补充到索引为0的位置上,然后索引指向1,
就漏掉了以前的索引为1的元素 因为索引为一的元素在第二次循环的时候已经掉到了索引0的位置
正确的删除操作:
#lst = ["篮球","排球","乒乓球","足球","电子竞技","台球"]
# for i in range(len(lst)): #0,1,2,3,4 # lst.pop(0) # print(lst) #[] #永远删索引是0元素 # for i in range(len(lst)): # lst.pop() # print(lst) #[] #从最后一个删
最合理的删除方法:
1,先把需要删除的元素写在一个新的列表中
2.循环这个新列表,删除老列表
5.fromkeys()用法
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["胡"]))#1797375051912 # print(id(d["辣"]))#1797375051912 # print(id(d["汤"]))#1797375051912 #说明这几个还是同一个[] 所以对其中一个进行改变别的也进行相应的改变 # d["胡"] .append("湖南特色") # print(d)#{'胡': ['湖南特色'], '辣': ['湖南特色'], '汤': ['湖南特色']}
6.深浅拷贝
先来看一下这个问题
从上到下只有一个列表创建
# lst1 = ["胡辣汤","麻辣香锅","灌汤包","油泼面"] # lst2 = lst1 #并没有产生新对象.只是一个指向(内存地址)的赋值 # print(id(lst1))#2253612239048 # print(id(lst2))#2253612239048
# lst1.append("葫芦娃")
# print(lst1)#['胡辣汤', '麻辣香锅', '灌汤包', '油泼面', '葫芦娃']
# print(lst2)#['胡辣汤', '麻辣香锅', '灌汤包', '油泼面', '葫芦娃']
用图来解释
# lst1 = ["胡辣汤","麻辣香锅","灌汤包","油泼面"] # lst2 = lst1.copy() #拷贝,抄作业,可以帮我们创建新的对象,和原来一模一样,浅拷贝 # print(id(lst1))#2232732993736 # print(id(lst2))#2232732993672 # # lst1.append("葫芦娃") # print(lst1) # print(lst2)
用图来解释
# lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]] # lst2 = lst1.copy() #浅拷贝,只拷贝第一层内容 # # print(id(lst1))#1199044806792 # print(id(lst2))#1199044806984 # print(lst1) # print(lst2) # # lst1[4].append("葫芦娃") # print(lst1) # print(lst2)
用图来解释
#深拷贝 需要引入一个模块
import copy
lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]]
lst2 = copy.deepcopy(lst1)#深拷贝 对象内部的所有内容都要复制一份.深度克隆 原型模式
print(id(lst1))#2150506176840
print(id(lst2))#2150506178120
print(lst1)#['胡辣汤', '灌汤包', '油泼面', '麻辣香锅', ['长白山', '白洋淀', '黄鹤楼']]
print(lst2)#['胡辣汤', '灌汤包', '油泼面', '麻辣香锅', ['长白山', '白洋淀', '黄鹤楼']]
lst1[4].append("葫芦娃")
print(lst1)#['胡辣汤', '灌汤包', '油泼面', '麻辣香锅', ['长白山', '白洋淀', '黄鹤楼', '葫芦娃']]
print(lst2)#['胡辣汤', '灌汤包', '油泼面', '麻辣香锅', ['长白山', '白洋淀', '黄鹤楼']]
用图来解释
为什么要有深浅拷贝?
提高创建速度 计算机中最慢的就是创建对象,需要分配内存各种事情
最快的方式就是以二进制流的方式进行复制 速度最快
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- [Linux] scp本地服务器和远程服务器拷贝文件 2019-03-01
- Python的Bottle框架中实现最基本的get和post的方法的教程 2018-12-13
- Linux下Python安装完成后如何使用pip命令 2018-11-22
- 2017年最新Python3.6网络爬虫实战案例基础+实战+框架+分布式 2018-06-22
- 常见查找算法之php, js,python版 2018-06-22
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash