划到底部为结论
先看例子
例1.
a = [1,1,1,1,1,1]
b = a # 用b = a[:]也同理
b[0] = 2
print(a)
print(b)
# [2,1,1,1,1,1]
# [2,1,1,1,1,1]
----------------------------
例2.
c = [1,1,1,1,1,1]
d = [i for i in c]
d[0] = 2
print(c)
print(d)
# [1,1,1,1,1,1]
# [2,1,1,1,1,1]
由上例1中可看出在Python中直接使用‘=’进行复制的话为浅拷贝,即a,b为同一数组,改变a,b任意一组两组都会改变;
而例2中对c进行了遍历后放进列表中形成了一个新列表再用‘=’赋值,实现了深拷贝,看到改变
d中的数时,不会改变c的值。而要对二维列表进行深拷贝同理也要遍历整个列表
a = [[1,1,1],[1,1,1]]
b = [[i for j in i] for i in a]
b[0][0] = 2
print(a)
print(b)
# [[1,1,1],[1,1,1]]
# [[2,1,1],[1,1,1]]
结论:
要实现深拷贝(即,改变值时,不改变原数组),则要对原数组进行遍历后赋值。
later = [for i in start]
浅拷贝的话就later = start即可。
注:later,start为定义的数组名