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完全独立的两个对象: