python中“copy”的使用方法


前言

项目上的需要,要使用复制列表,发现的错误。


一、直接赋值、浅拷贝和深拷贝

直接赋值:

a = [1,2,[3,4]]
b = a
print("直接赋值:")
print("a:",a)
print("b:",b)
print("第一次改变:")
a[1] = 666
print("a:",a)
print("b:",b)
print("第二次改变:")
a[2][0] = 777
print("a:",a)
print("b:",b)

输出:

直接赋值:
a: [1, 2, [3, 4]]
b: [1, 2, [3, 4]]
第一次改变:
a: [1, 666, [3, 4]]
b: [1, 666, [3, 4]]
第二次改变:
a: [1, 666, [777, 4]]
b: [1, 666, [777, 4]]

图解:
a和b指的同一个对象:
直接赋值


浅拷贝:

a = [1,2,[3,4]]
b = a.copy()
print("浅拷贝:")
print("a:",a)
print("b:",b)
print("第一次改变:")
a[1] = 666
print("a:",a)
print("b:",b)
print("第二次改变:")
a[2][0] = 777
print("a:",a)
print("b:",b)

输出:

浅拷贝:
a: [1, 2, [3, 4]]
b: [1, 2, [3, 4]]
第一次改变:
a: [1, 666, [3, 4]]
b: [1, 2, [3, 4]]
第二次改变:
a: [1, 666, [777, 4]]
b: [1, 2, [777, 4]]

图解:
a和b虽然指的不同对象,但是指同一个子对象:
浅拷贝


深拷贝:

import copy
a = [1,2,[3,4]]
b = copy.deepcopy(a)
print("深拷贝:")
print("a:",a)
print("b:",b)
print("第一次改变:")
a[1] = 666
print("a:",a)
print("b:",b)
print("第二次改变:")
a[2][0] = 777
print("a:",a)
print("b:",b)

输出:

深拷贝:
a: [1, 2, [3, 4]]
b: [1, 2, [3, 4]]
第一次改变:
a: [1, 666, [3, 4]]
b: [1, 2, [3, 4]]
第二次改变:
a: [1, 666, [777, 4]]
b: [1, 2, [3, 4]]

图解:
a和b完全独立的两个对象:
深拷贝

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐