python 的深拷贝与浅拷贝

在开发一个流程的过程中使用到了变量给变量赋值,出现了意想不到的结果,想起来之前学到的深拷贝与浅拷贝
写了一个简单的示例:

a = [1, 2, 3]
c = [4, 5, 6]
b = a
print(“############a:”, a)
print(“############b:”, b)
a.extend(c)
b.append(7)
print(“extend 处理后的 a:”, a)
print(“append 处理后的 b:”, b)

输出结果
############a: [1, 2, 3]
############b: [1, 2, 3]
extend 处理后的 a: [1, 2, 3, 4, 5, 6, 7]
append 处理后的 b: [1, 2, 3, 4, 5, 6, 7]
Process finished with exit code 0

这种情况出现的原因是使用了浅拷贝:即多个变量指向同一容器,
当原容器对象中可变对象中有元素发生变化,拷贝得到的对象也会变化。而使用深拷贝时,不会有这种问题。
如果我们把 b = a 换一下:

a = [1, 2, 3]
c = [4, 5, 6]
b = a[:]
print(“############a:”, a)
print(“############b:”, b)
a.extend(c)
b.append(7)
print(“extend 处理后的 a:”, a,)
print(“append 处理后的 b:”, b)
输出结果:
############a: [1, 2, 3]
############b: [1, 2, 3]
extend 处理后的 a: [1, 2, 3, 4, 5, 6]
append 处理后的 b: [1, 2, 3, 7]
Process finished with exit code 0

这里使用了深拷贝的方法,不再是指向同一容器,而是复制了一个容器
也可以使用 deepcopy() 函数

定义一个列表,进行深 copy:

list1 = [[1, 2], ‘rpa’, 666]

list2 = copy.deepcopy(list1)

一些简单的经验分享,希望小伙伴们不踩这个坑