深浅拷贝的主要区别:当原始列表中子元素发生变化时,跟着变的是浅拷贝,反之则是深拷贝
1.普通赋值介绍
赋值:赋值的过程,类似于引用,原始的列表改变,赋值的变量也会改变
a = [1,[2,2,2,2],3,4,5]
b = a
print(a) # [1, [2, 2, 2, 2], 3, 4, 5]
print(b) # [1, [2, 2, 2, 2], 3, 4, 5]
a.append(6) #当原始列表a改变时,b也会跟着改变
print(a) # [1, [2, 2, 2, 2], 3, 4, 5, 6]
print(b) # [1, [2, 2, 2, 2], 3, 4, 5, 6]
2.深拷贝:原始列表怎么变,深拷贝的内容都不会变
import copy
c = [1,[2,2,2,2],3,4,5]
d = copy.deepcopy(c)
print(c) # [1, [2, 2, 2, 2], 3, 4, 5]
print(d) # [1, [2, 2, 2, 2], 3, 4, 5]
c.append(6) # 当原始列表c发生改变时,d不会跟着变
print(c) # [1, [2, 2, 2, 2], 3, 4, 5, 6]
print(d) # [1, [2, 2, 2, 2], 3, 4, 5]
c[1].append(222) # 当原始列表c中的子元素发生变化是,d也不会变
print(c) # [1, [2, 2, 2, 2, 222], 3, 4, 5, 6]
print(d) # [1, [2, 2, 2, 2], 3, 4, 5]
3.浅拷贝:原始列表中的子元素发生变化,拷贝内容才会发生变化
import copy
e = [1,[2,2,2,2],3,4,5]
f = copy.copy(e)
print(e) # [1, [2, 2, 2, 2], 3, 4, 5]
print(f) # [1, [2, 2, 2, 2], 3, 4, 5]
e.append(6) #原始列表e发生改变,f不会变
print(e) # [1, [2, 2, 2, 2], 3, 4, 5, 6]
print(f) # [1, [2, 2, 2, 2], 3, 4, 5]
e[1].append(222) #原始列表e中的子元素发生变化,f跟着变了
print(e) # [1, [2, 2, 2, 2, 222], 3, 4, 5, 6]
print(f) # [1, [2, 2, 2, 2, 222], 3, 4, 5]
|