Python中的赋值操作是将变量引用指向对象,而非复制对象本身。因此,如果我们希望在不改变原有变量值的情况下对变量进行操作,就需要进行拷贝操作。Python中的拷贝操作主要有浅拷贝和深拷贝两种。本文将通过多个方面对python浅拷贝与深拷贝做详细的阐述。
一、浅拷贝
浅拷贝(Shallow Copy)指将原有变量的一级内容复制到新的变量中,如果一级内容是可变的,则改变新变量中的这些内容会影响原有变量,如果一级内容是不可变的,修改新变量中的内容就不会影响原有变量。
在Python中,list的拷贝操作默认是浅拷贝。
a = [[1,2,3],[4,5,6]] b = a.copy() #浅拷贝 print(b) a[0][0] = 7 print(a) print(b)
输出结果:
[[1, 2, 3], [4, 5, 6]] [[7, 2, 3], [4, 5, 6]] [[7, 2, 3], [4, 5, 6]]
可以看到,当我们修改a中的内容时,b中的内容也随之改变。
二、深拷贝
深拷贝(Deep Copy)是将原有变量的所有内容全部复制到新的变量中,如果改变新变量中的内容,不会对原有变量造成任何影响。
在Python中,可以使用copy模块中的deepcopy函数来进行深拷贝操作。
import copy a = [[1,2,3],[4,5,6]] b = copy.deepcopy(a) #深拷贝 print(b) a[0][0] = 7 print(a) print(b)
输出结果:
[[1, 2, 3], [4, 5, 6]] [[7, 2, 3], [4, 5, 6]] [[1, 2, 3], [4, 5, 6]]
可以看到,当我们修改a中的内容时,b中的内容不会发生任何改变。
三、浅拷贝与深拷贝的应用
1、列表拷贝
在Python中,可以使用浅拷贝或者深拷贝对列表进行拷贝操作。
示例:
import copy a = [1,2,[3,4]] b = a.copy() #浅拷贝 c = copy.deepcopy(a) #深拷贝 a[2][0] = 5 print(a,b,c)
输出结果:
[1, 2, [5, 4]] [1, 2, [5, 4]] [1, 2, [3, 4]]
可以看到,浅拷贝的结果就是当我们修改a中的内容时,b中的内容也随之改变。而深拷贝的结果就是当我们修改a中的内容时,c中的内容不会发生任何改变。
2、函数传参
在Python中,函数传参时也需要注意浅拷贝与深拷贝的区别。
示例:
import copy def test(a,b): a[0] = 7 b[0] = 8 a = [1,2,3] b = [1,2,3] test(a,b) print(a,b) a = [[1,2,3],[4,5,6]] b = [[1,2,3],[4,5,6]] test(a,b) print(a,b)
输出结果:
[7, 2, 3] [8, 2, 3] [[7, 2, 3], [4, 5, 6]] [[8, 2, 3], [4, 5, 6]]
可以看到,当我们传递可变类型(列表等)时,如果直接对其进行修改,会改变原有变量的值。而进行浅拷贝或者深拷贝操作后,则不会改变原有变量的值。
四、总结
本文通过对Python中浅拷贝与深拷贝的介绍,希望读者能够更好的理解拷贝操作,并且在使用Python进行开发时更加方便地进行变量操作。
本文链接:https://my.lmcjl.com/post/8445.html
4 评论