巨蟒python全栈开发-第7天 基本数据类型补充&深浅拷贝
Posted studybrother
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了巨蟒python全栈开发-第7天 基本数据类型补充&深浅拷贝相关的知识,希望对你有一定的参考价值。
1.基本数据类型补充
2.深浅拷贝
DAY5-基本数据类型(基本数据类型补充&深浅拷贝)
本节主要内容:
1
(1)
#1.
‘‘‘
#字符串是不可变的数据类型
lst=[‘alex‘,‘dsb‘,‘wusir‘,‘xsb‘]#大烧饼,小烧饼
s=‘_‘.join(lst) #使用前面的字符串,对后面的列表进行拼接,拼接的结果是一个字符串
print(s)
‘‘‘
(2)
‘‘‘
#split() 根据你给的参数进行切割,切割的结果是列表
s=‘alex_dbs_wusir_xsb‘
lst=s.split("_") #列表
print(lst)
‘‘‘
#需要把字符串转化成列表:split()
#需要把列表转化成字符串:join()
‘‘‘
print("*".join(‘周润发‘)) #中间有个迭代器,用迭代的方式进行的拼接
‘‘‘
(3)
# 2.关于删除
lst=[‘篮球‘,‘足球‘,‘乒乓球‘,‘电子竞技‘,‘台球‘]
# lst.remove() #第一种方法
# print(lst)
# for el in lst:
# lst.remove(el) #第二种方法:错误写法
# print(lst)
#删不干净,原因分析:删除一个,元素的索引需要重新排序,for循环向后走一个,差一个
# for i in range(len(lst)): #0 1 2 3 4
# lst.pop(i)
# print(lst) #第三种方法:报错:pop index out of range
# for i in range(len(lst)): #0 1 2 3 4
# lst.pop()
# print(lst) 第四种方法:正确
# for i in range(len(lst)): #0 1 2 3 4
# lst.pop(0)
# print(lst) #第五种方法:正确
#
# lst=[‘篮球‘,‘足球‘,‘乒乓球‘,‘电子竞技‘,‘台球‘]
# #最合理的删除方式
# #1.把要删除的内容写在新列表中
# #2.循环这个新列表,删除老列表
#
# #需求:删除列表中带球字的运动项目
# new_lst=[]
# for el in lst:
# if ‘球‘ in el:
# new_lst.append(el) #new_lst记录要删除的内容
# #要删除的列表
# print(new_lst)
# #循环新列表,删除老列表
# for el in new_lst: #[‘篮球‘,‘排球‘,‘足球‘,‘台球‘]
# lst.remove(el)
# print(lst)
(4)
#字典
#字典在被循环的时候是不能删除的
# dic={‘张无忌‘:‘乾坤大挪移‘,‘周芷若‘:‘哭‘,‘赵敏‘:‘闹‘}
‘‘‘
s={‘杨逍‘,‘范瑶‘,‘韦一笑‘,‘谢逊‘} #set集合
for el in s:
s.remove(el) #Set changed size during iteration
‘‘‘
#集合和字典是一家人
#字典:key必须是不可变的,可哈希的,不重复的
#集合:元素必须是不可变的,可哈希的,不重复的
#集合相当于只存了key的字典
# dic={‘韦一笑‘:‘青翼蝠王‘,‘韦一笑‘:‘张无忌‘}#后面覆盖前面的
# dic[‘韦一笑‘]=‘殷天正‘ #修改
# print(dic)
(5) #面试项目经理,常考题目
#坑:大坑,神坑
#fromkeys() 帮助我们创建字典用的
#把第一个参数进行迭代,拿到每一项作为key和后面的value组合成字典
# d=dict.fromkeys(‘张无忌‘,‘赵敏‘)#创建字典
# print(d) #{‘张‘: ‘赵敏‘, ‘无‘: ‘赵敏‘, ‘忌‘: ‘赵敏‘}
#
# d=dict.fromkeys(‘abc‘,‘赵敏‘)#创建字典
# print(d) #{‘a‘: ‘赵敏‘, ‘b‘: ‘赵敏‘, ‘c‘: ‘赵敏‘}
#坑1:返回新字典,和原来的字典没有关系
‘‘‘
dic={}
d=dic.fromkeys(‘风扇哥‘,‘很困‘)
print(dic) #{}
print(d) #{‘风‘: ‘很困‘, ‘扇‘: ‘很困‘, ‘哥‘: ‘很困‘}
‘‘‘
#坑2:如果value是可变的数据类型
#产生了三个键值对,是一个列表
‘‘‘
d=dict.fromkeys(‘胡辣汤‘,[])
print(d) #{‘胡‘: [], ‘辣‘: [], ‘汤‘: []}
d[‘胡‘].append(‘河南特色‘)
print(d) #{‘胡‘: [‘河南特色‘], ‘辣‘: [‘河南特色‘], ‘汤‘: [‘河南特色‘]}
‘‘‘
# 练习:
‘‘‘
dic=dict.fromkeys([‘alex‘,‘wusir‘],[‘太白‘,‘姗姗‘])
print(dic) #{‘alex‘: [‘太白‘, ‘姗姗‘], ‘wusir‘: [‘太白‘, ‘姗姗‘]}
dic[‘alex‘].append(‘老村长‘)
print(dic) #{‘alex‘: [‘太白‘, ‘姗姗‘, ‘老村长‘], ‘wusir‘: [‘太白‘, ‘姗姗‘, ‘老村长‘]}
#上边的例子说明,只要创建的键不同,但是用的值是一样的内存地址,增删都是一个操作
print(id(dic[‘alex‘])) #2119427394952
print(id(dic[‘wusir‘])) #2119427394952
‘‘‘
深浅拷贝部分
# lst=[1,3,[5,7],9]
# lst1=lst
# lst2=lst[:]
# lst[-2].append(9)
lst.append(4)
# print(lst) #[1, 3, [5, 7, 9], 9, 4]
# print(lst1) #[1, 3, [5, 7, 9], 9, 4]
# print(lst2) #[1, 3, [5, 7, 9], 9]
‘‘‘
(1)
#从上到下只有一个列表被创建
‘‘‘
lst1=[‘胡辣汤‘,‘灌汤包‘,‘油泼面‘,‘麻辣香锅‘]
lst2=lst1
print(id(lst1)) #2833498846728
print(id(lst2)) #2833498846728
lst1.append(‘胡辣汤‘)
print(lst1) #[‘胡辣汤‘, ‘灌汤包‘, ‘油泼面‘, ‘麻辣香锅‘, ‘胡辣汤‘]
print(lst2) #[‘胡辣汤‘, ‘灌汤包‘, ‘油泼面‘, ‘麻辣香锅‘, ‘胡辣汤‘]
‘‘‘
(2)
#copy 等价于[:]切割
‘‘‘
lst1=[‘胡辣汤‘,‘灌汤包‘,‘油泼面‘,‘麻辣香锅‘]
lst2=lst1.copy() #拷贝,抄作业,可以帮我们创建新的对象
print(id(lst1)) #2459666429448
print(id(lst2)) #2459666429320
lst1.append(‘胡辣汤‘)
print(lst1) #[‘胡辣汤‘, ‘灌汤包‘, ‘油泼面‘, ‘麻辣香锅‘, ‘胡辣汤‘]
print(lst2) #[‘胡辣汤‘, ‘灌汤包‘, ‘油泼面‘, ‘麻辣香锅‘]
‘‘‘
‘‘‘
lst1=[[1,2],‘胡辣汤‘,‘灌汤包‘,‘油泼面‘,‘麻辣香锅‘]
lst2=lst1.copy() #拷贝,抄作业,可以帮我们创建新的对象,和原来长的一模一样,浅拷贝
print(id(lst1)) #2459666429448
print(id(lst2)) #2459666429320
lst1.append(‘胡辣汤‘)
lst1[0].append(‘1‘)
print(lst1) #[[1, 2, ‘1‘], ‘胡辣汤‘, ‘灌汤包‘, ‘油泼面‘, ‘麻辣香锅‘, ‘胡辣汤‘]
print(lst2) #[[1, 2, ‘1‘], ‘胡辣汤‘, ‘灌汤包‘, ‘油泼面‘, ‘麻辣香锅‘]
‘‘‘
(3)#引入一个模块
import copy
lst1=[[1,2],‘胡辣汤‘,‘灌汤包‘,‘油泼面‘,‘麻辣香锅‘,[‘长白山‘,‘白洋淀‘,‘黄鹤楼‘]]
lst2=copy.deepcopy(lst1) #深拷贝,对象内部的所有内容都要复制一份,深度克隆(java中),原型模式(设计模式中)
print(id(lst1)) #1882059537224
print(id(lst2)) #1882059537160
lst1[5].append(‘葫芦娃‘)
print(lst1) #[[1, 2], ‘胡辣汤‘, ‘灌汤包‘, ‘油泼面‘, ‘麻辣香锅‘, [‘长白山‘, ‘白洋淀‘, ‘黄鹤楼‘, ‘葫芦娃‘]]
print(lst2) #[[1, 2], ‘胡辣汤‘, ‘灌汤包‘, ‘油泼面‘, ‘麻辣香锅‘, [‘长白山‘, ‘白洋淀‘, ‘黄鹤楼‘]]
# 为什么要有深浅拷贝?
#提供创建对象的速度
#计算机中最慢的,就是创建对象,需要分配内存
#最快的方式就是二进制流的形式进行赋值,速度最快(没有之一)
#做作业? 抄作业
#以后学习的各种设计模式,就是为了提高速度
#clone:克隆
以上是关于巨蟒python全栈开发-第7天 基本数据类型补充&深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章