20201225-2 列表的使用2

1 copy 相当于复制一个列表
names = ["4ZhangYang","#!Guyun","xXiangPeng","ChenRonghua","XuLiangChen"]
name2 = names.copy()
print(names)
print(name2)
--->
['4ZhangYang', '#!Guyun', 'xXiangPeng', 'ChenRonghua', 'XuLiangChen']
['4ZhangYang', '#!Guyun', 'xXiangPeng', 'ChenRonghua', 'XuLiangChen']

 

1-1 现在把 XiangPeng 改成中文
names[2] = "向鹏"
print(names)
print(name2)
name2 变了吗? 没有变
---> ['4ZhangYang', '#!Guyun', '向鹏', 'ChenRonghua', 'XuLiangChen']
---> ['4ZhangYang', '#!Guyun', 'xXiangPeng', 'ChenRonghua', 'XuLiangChen']

1-2 列表中可以继续写列表,形成子列表,现在希望将 alex 大写 names = ["4ZhangYang","#!Guyun","xXiangPeng",["alex","jack"],"ChenRonghua","XuLiangChen"] name2 = names.copy() 子列表 ["alex","jack"] 可以当做一个元素 names[2] = "向鹏" names[3][0] = "ALEXANDER" print(names) print(name2) ---> ['4ZhangYang', '#!Guyun', '向鹏', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangChen'] ---> ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangChen'] name2中 没有 向鹏 但是 ALEXANDER 在 names 和 name2 中 都修改了 这个 copy 好像只是 copy 了 第一层,没错,这个 copy 叫做 浅拷贝,只拷贝 第一层 子列表是一个独立的内存指针,是大列表中的一个内存地址;copy其实是 拷贝了 内存地址 所以 ALEXANDER 也变了

 

2 如果想深拷贝怎么办?列表是一种不同于 数字 和字符串的 数据类型
>>> a=1
>>> b=a
>>> a=2
>>> b
1
但是,如果换成列表
>>> a=[1,2,3]
>>> b=a
>>> a[1]=555
>>> b
[1, 555, 3]
可以 用
import copy 的方式 import copy names = ["4ZhangYang","#!Guyun","xXiangPeng",["alex","jack"],"ChenRonghua","XuLiangChen"] name2 = copy.copy(names) names[2] = "向鹏" names[3][0] = "ALEXANDER" print(names) print(name2) ---> ['4ZhangYang', '#!Guyun', '向鹏', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangChen'] ---> ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangChen'] 这个和 列表中的 copy 是完全一样的
必须手动的写 深拷贝 name2
= copy.deepcopy(names) ---> ['4ZhangYang', '#!Guyun', '向鹏', ['ALEXANDER', 'jack'], 'ChenRonghua', 'XuLiangChen'] ---> ['4ZhangYang', '#!Guyun', 'xXiangPeng', ['alex', 'jack'], 'ChenRonghua', 'XuLiangChen'] 这时,完全独立了,这就是 深拷贝 和 浅拷贝 深拷贝需求量不大,深拷贝会占用两个独立空间

 

3 如果想做列表的循环
3-1
for i in names:
    print(i)
--->
4ZhangYang
#!Guyun
xXiangPeng
['alex', 'jack']
ChenRonghua
XuLiangChen
3-2 有步长的切片
names = ["4ZhangYang","#!Guyun","xXiangPeng",["alex","jack"],"ChenRonghua","XuLiangChen"]
print(names[0:-1:2])
---> ['4ZhangYang', 'xXiangPeng', 'ChenRonghua']
0 可以省略,变为
print(names[::2])
如果去掉步长,print(names[:]) 代表 0 到 -1 

 

posted @ 2020-12-25 16:39  Malakh  阅读(98)  评论(0编辑  收藏  举报