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