赋值、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中的参数,运行结果如下