目录
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度全方位无死角地,每一层嵌套里面的数据。
对应的关系就是: