1.本次深浅复制还是以names列表为例,names=["wu","li","xia","hu","chen"]
(1)以下先来说一下浅复制语句:name2=names.copy(),这时发现names、name2输出的值是一样的。
如果再将names中某个值改变,names[2]=“夏”,输出结果中看到names中的xia变为夏,name2的输出值未发生改变。
(2)如果将该names列表修改为names=["wu","li","xia",["al","jack"],"hu","chen"],将names[3][0]="AL",这是发现输出结果中"al"输出都变成了"AL",这是因为["al","jack"],在列表中相当于一个内存地址,复制的时候相当于复制的是al jack存的地址,同样如果将name2[3][0]="Wu",同样names[3][0]也为"Wu",这时可以使用id()查看一下id(names[3])与name2[3])的地址,发现是一样的。
names=["wu","li","xia",["al","jack"],"hu","chen"] #列表
name2=names.copy()
print(names)
print(name2)
#names[2]="夏"
names[3][0]="AL" #["al","jack"]在列表中相当于一个内存地址,复制的时候相当于复制的是al jack存的地址,同样如果将name2[3][0]="Wu",同样names[3][0]也为"Wu"
#name2[3][0]="Wu"
#print(id(names))
#print(id(name2))
print(id(names[3]))
print(id(name2[3]))
print(names)
print(name2)
这时可以看见输出结果为:
['wu', 'li', 'xia', ['al', 'jack'], 'hu', 'chen']
['wu', 'li', 'xia', ['al', 'jack'], 'hu', 'chen']
18821288
18821288
['wu', 'li', '夏', ['Wu', 'jack'], 'hu', 'chen']
['wu', 'li', 'xia', ['Wu', 'jack'], 'hu', 'chen']
(3)如果引入copy库,import copy,那么name2=names.copy()也可以写成name2=copy,copy(names),着两者输出结果是一样的。
(4)引入copy库,有深copy,程序表现为name2=copy.deepcopy(names),这时将names[3][0],name2[3][0]均赋予一个新值,发现输出结果互不影响,此时两者id也不一样。
import copy
names=["wu","li","xia",["al","jack"],"hu","chen"] #列表
name2=copy.deepcopy(names)
print(names)
print(name2)
names[3][0]="AL"
name2[3][0]="Wu"
print(id(names[3]))
print(id(name2[3]))
print(names)
print(name2)
此时输出结果为
46018848
46497064
['wu', 'li', '夏', ['AL', 'jack'], 'hu', 'chen']
['wu', 'li', 'xia', ['Wu', 'jack'], 'hu', 'chen']
2.for循环在列表中的使用,直接插入循环即可
names=["wu","li","xia",["al","jack"],"hu","chen"] #列表 for i in names: print(i)
输出结果为
wu
li
xia
['al', 'jack']
hu
chen
3.如果想要隔位置输出,直接 print(names[0:-1:2]),表示从第一个到最后一个,也可以表示为print(names[::2])