1.空列表的创建、内存分配、元素的访问取值和替换,添加,删除,清除、元素段的截取、 出现的次数、最大值和最小值
#创建一个空列表:一般列表命名为ListXXX list1 = [] print(list1) #创建一个有元素的列表,list2在堆里开辟空间,其中的元素在栈里开辟空间 list2 = [10,30,54,5,6] print(list2) #同一列表,可以存储不同类型的元素 list3 = [True,None,"hello",10] print(list3) #列表内元素的访问:使用取值或者替换 print(list3[2]) list3[2]=100 print(list3[2]) #列表操作:组合、重复、元素是否在列表中、列表的截取 list4 = list2 + list3 print(list4) list4 = list4*2 print(list4) print(10 in list4) print(list4[1:4]) #涉及到区间包头不包尾,前闭后开区间 #列表的功能:追加元素、末尾追加、删除、移除、获取列表长度、最大值、最小值、拷贝 list2.append(40) print(list2) list2.append([50]) #添加列表本身 print(list2) list2.extend([40,50]) #不是添加列表,而是添加元素 print(list2) list2.insert(2,100) #参数有两个,一个是插入位置,另一个是插入元素 print(list2) list2.insert(1,[50,20]) #插入是整个列表 print(list2) list2.pop() #删除末尾一个元素 print(list2) list2.pop(2) #删除位置索引2的元素 print(list2) list2.remove([50,20]) #删除元素[50,20] list2.remove([50]) print(list2) ''' list2.clear() #清楚列表所有元素 print(list2) ''' print(len(list2)) print(max(list2)) #最大值 print(min(list2)) #最小值 print(list2.count(10)) #元素10在列表list2中出现的次数 list5 = [10,5,1,23,54,98,46] #浅拷贝:引用的拷贝,在栈里面,不改变实体 list51 = list5 list51[2] = 11 print(list5) print(list51) list5 = [10,5,1,23,54,98,46] #深拷贝:拷贝实体,在堆里面 list52 = list5.copy() list52[2] = 11 print(list5) print(list52)
结果显示:
2.深浅拷贝的含义和具体使用
浅拷贝:相当于引用,改变本值,引用的值也随之改变
深拷贝:相当于备份,拷贝的是实体对象
#从内存的角度 list5 = [10,5,1,23,54,98,46] #浅拷贝:引用【栈空间】的拷贝,不改变实体 list51 = list5 list51[2] = 11 print(list5) print(list51) list5 = [10,5,1,23,54,98,46] #深拷贝:内存【堆空间】,拷贝实体,相当于拷贝备份 list52 = list5.copy() list52[2] = 11 print(list5) print(list52) #从内容的角度【多层拷贝】 #导入了copy模块 #copy():浅拷贝 import copy a = [1,2,3] b = [4,5,6] c = [a,b] #引用,本身变了,引用的值也随之改变 print(c) d = copy.copy(c) print(id(c),id(d)) #deepcopy():深拷贝 e = copy.deepcopy(c) #拷贝实体, print(id(c),id(e)) #给a追加元素,看c,d,e是否改变了 a.append(4) print(a) print(c) print(d) print(e) print(id(a),id(c),id(d),id(e))
说明(易出错点):
当未导入copy模块时候,list.copy():是深拷贝,相当于word文件的备份,改动备份文件,对原始文件不会有所修改。
当导入import copy模块的时候,copy():是浅拷贝,deepcopy():是深拷贝,地址都不会相同。