Python浅拷贝与深拷贝

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

留下您的评论.