赋值、copy()以及deepcopy()的区别

针对以下代码进行分析举例

L1 = [1, 2, 3, 4]

L = [ L1, 5, 7]

L2 = L

Import copy

L3 = copy.copy(L2)

L4 = copy.deepcopy(L2)

1.赋值

L1 = [1, 2, 3, 4]

在计算机内存中开辟一块内存,让L1指向这块内存区域,L中的每个元素依次绑定对象1,2,3,4。

 L = [ L1, 5, 7]

在计算机内存中开辟一块区域,让L指向该区域,L的第0个元素绑定L1,第二个元素绑定对象5,第三个元素绑定对象7

L2 = L

让L2这个变量也绑定L所绑定的对象,所以当L1或L中的元素变化时,L2 中的元素也会相应的发生改变。


2.copy()

L3 = copy.copy(L2)

只是拷贝了L2这一层,没有进行深层次的拷贝,即在内存中开辟了一个空间,与变量L3进行绑定,L3的第一个元素与L1绑定,L3的第2个元素和第3个元素分别与对象5和对象7绑定,所以改变L1中的元素,L3中的元素会随之改变,但L2中的元素改变时,L3中的元素不会改变


3.deepcopy()

L4 = deepcopy(L2)

相当于将L2中的每一层都进行拷贝了一遍,所以无论怎么改变L1和L2中的元素,L4中的元素都不会改变。


4.举例,现在修改L1和L中的参数,运行结果如下



猜你喜欢

转载自blog.csdn.net/Zp18189530679/article/details/80115141