目录
1.引用
2.浅拷贝
3.深拷贝
1.引用
x=[1,2,3]
y=x
print(y)
输出结果:[1,2,3]。
当一个变量指向数据结构时, 这就是引用。
x=[1,2,3] y=x print(y) x[1]=1 print(y)
输出结果:[1,2,3]
[1,1,3]
当x指向的对象数据发生改变时,y也会发生改变,它们的关系如上图所示。
2.浅拷贝
①使用copy方法
x=[1,2,3] y=x.copy() #copy函数 x[1]=1 print(x) print(y)
输出结果:[1,1,3]
[1,2,3]
以下是它们的关系,x与y分别指向不同的数据对象:
②使用切片的方法实现copy方法
x=[1,2,3] y=x[:] x[1]=1 print(x) print(y)
输出结果:[1,1,3]
[1,2,3]
以下是它们的关系,x与y分别指向不同的数据对象:
③注意浅拷贝解决不了的问题
x=[[1,2,3],[4,5,6],[7,8,9]] y=x.copy(); x[1][1]=0 print(x,end=' ') print(y) # 第二种方式:与上一个是一样的功能 import copy x=[[1,2,3],[4,5,6],[7,8,9]] y=copy.copy(x) x[1][1]=0 print(x,end=' ') print(y)
输出结果:[[1, 2, 3], [4, 0, 6], [7, 8, 9]] [[1, 2, 3], [4, 0, 6], [7, 8, 9]]
以上结果得出,x是受y的影响的。
由上图看出,copy()只是拷贝第一层的数据结构,而第二层的还是关联着,属于引用的关系,x是受y的影响的。所以对于嵌套的关系,需要使用深拷贝。
3.深拷贝
要实现深拷贝我们要借助到copy模块,
import copy x=[[1,2,3],[4,5,6],[7,8,9]] y=copy.deepcopy(x) x[1][1]=0 print(x,end=' ') print(y)
输出结果:[[1, 2, 3], [4, 0, 6], [7, 8, 9]] [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
deepcopy函数将原对象拷贝的同时,也将对象中所有引用的子对象一并进行了拷贝。如果存在多层嵌套的话,深拷贝360度全方位无死角地,每一层嵌套里面的数据。
对应的关系就是:



