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 评论