python中fromkeys用法_09 Python之深浅拷贝以及fromkeys的用法

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)#['胡辣汤', '麻辣香锅', '灌汤包', '油泼面', '葫芦娃']

用图来解释

afc7f4858ac9cea1668c1f5ab1ebe709.png

#lst1 = ["胡辣汤","麻辣香锅","灌汤包","油泼面"]#lst2 = lst1.copy() #拷贝,抄作业,可以帮我们创建新的对象,和原来一模一样,浅拷贝#print(id(lst1))#2232732993736#print(id(lst2))#2232732993672#

#lst1.append("葫芦娃")#print(lst1)#print(lst2)

用图来解释

694b7d4e7aaa10194e1cade7cb8962d4.png

#lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]]#lst2 = lst1.copy() #浅拷贝,只拷贝第一层内容#

#print(id(lst1))#1199044806792#print(id(lst2))#1199044806984#print(lst1)#print(lst2)#

#lst1[4].append("葫芦娃")#print(lst1)#print(lst2)

用图来解释

43c60c3341b1ec445eac02cfbe796b7a.png

#深拷贝 需要引入一个模块

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)#['胡辣汤', '灌汤包', '油泼面', '麻辣香锅', ['长白山', '白洋淀', '黄鹤楼']]

用图来解释

25dab60502a5638dfccdce97939d48c3.png

为什么要有深浅拷贝?

提高创建速度 计算机中最慢的就是创建对象,需要分配内存各种事情

最快的方式就是以二进制流的方式进行复制 速度最快

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值