美文网首页
python深拷贝与浅拷贝

python深拷贝与浅拷贝

作者: ltochange | 来源:发表于2021-05-26 19:08 被阅读0次

    转自Python 直接赋值、浅拷贝和深度拷贝解析

    区别

    • 直接赋值:其实就是对象的引用(别名)。
    • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
    • 深拷贝(deepcopy):copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

    解析

    1、b = a: 赋值引用,a 和 b 都指向同一个对象。


    赋值

    2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。


    浅拷贝

    3、b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。


    深拷贝

    例子

    import copy
    data = [1, 2, [1, 2, 3, 4], [5, 6, 7, 8], [8, 9, 0, 0]]
    data_1 = data
    # data_2 = data.copy()  # 和调用copy.copy方法结果一致
    data_2 = copy.copy(data)
    data_right = copy.deepcopy(data)
    data[1] = 22
    data[-1].reverse()
    
    print(data)
    print(data_1)
    print(data_2)
    print(data_right)
    
    [1, 22, [1, 2, 3, 4], [5, 6, 7, 8], [0, 0, 9, 8]]  # 原有data
     [1, 22, [1, 2, 3, 4], [5, 6, 7, 8], [0, 0, 9, 8]]  # 赋值,可变变量和不可变变量都随之变化
     [1, 2, [1, 2, 3, 4], [5, 6, 7, 8], [0, 0, 9, 8]]    # 浅拷贝,可变变量随之变化, 不可变变量不变
     [1, 2, [1, 2, 3, 4], [5, 6, 7, 8], [8, 9, 0, 0]]   # 深拷贝,可变变量和不可变变量都不变化
    

    深拷贝才是真正意义上的拷贝,与原来完全独立

    相关文章

      网友评论

          本文标题:python深拷贝与浅拷贝

          本文链接:https://www.haomeiwen.com/subject/aeqlsltx.html