Python学习之列表的创建及操作和深浅拷贝

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():是深拷贝,地址都不会相同。

猜你喜欢

转载自blog.csdn.net/qq_38358499/article/details/87884973