一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
0 环境
- 编辑器:idea
- 系统版本:win10
- python版本:3.9.6
1 影子拷贝
使用:列表.copy()。如下:通过a.copy(),复制一份列表给a1,然后a1再去操作值时,修改的是a1的值,而a并不会受此影响。
def copy_demo():
a = [1,2,3,4,5,6,7,8]
a1 = a.copy()
print("a1 ==>", a1)
a1[1] = 12
print("a1 ==>", a1)
print("a ==>", a)
2 深拷贝
如下这样修改a1[2][1]的值,你会发现值竟然被修改了,并且a也跟着变了。
def deep_demo():
a = [1,2,[3,4,5],6,7,8]
a1 = a.copy()
a1[1] = 12
print("a ==>", a)
print("a1 ==>", a1)
a1[2][1] = 32
print("a ==>", a)
print("a1 ==>", a1)
那么我们在回归影子拷贝,如下代码:copy(列表),赋值操作,对可变对象是引用传递,对不可变对象是值传递,这样也就能说的通了,为啥可以修改了列表中列表了。
def copy(list):
temp = []
for i in list:
temp.append(i)
return temp
但是你要是用深拷贝,则需要引入copy模块,请使用deepcopy。
如下:看到了吧,再次修改a1[2][1],a1变化了,但是a不会跟着变化。
from copy import deepcopy
def deep_demo():
a = [1,2,[3,4,5],6,7,8]
a1 = deepcopy(a)
a1[1] = 12
print("a ==>", a)
print("a1 ==>", a1)
a1[2][1] = 32
print("a ==>", a)
print("a1 ==>", a1)
2 元组简介
认识了列表,不得不提另一个有序列表了,它叫元组(tuple)。划重点有序列表。列表和元组很是相似,但是元组走向另一个极端(补充),就是一旦初始化后,就不能修改。也就是说,也就是能被修改的机会就是初始化的时候,说白了,正常古代是终身制,一旦当上了,就很难换了。
3 总结
若是不可变对象多且无可变对象的话,直接用copy即可。但是你不想原列表不会被影响,需要引入from copy import deepcopy,然后deepcopy(列表)调用,这样新旧列表相互不会影响,看情况而论。元组简介,如果列表是多变的,那么元组就是不变的,唯一相同点就是有序,但是元组的不变也是有条件,比如正常皇帝终身制的,但是谁知道他哪个的妃子的儿子不安稳呢,对于他来说,他还是皇帝不变的,儿子也是那么些变,唯一变了的是儿子的心。