zoukankan      html  css  js  c++  java
  • python列表的复制,扯一下浅拷贝与深拷贝的区别

    将一个列表的数据复制到另一个列表中。
    使用列表[:],可以调用copy模块

    import copy
    
    A = [21,22,23,24,['a','b','c','d'],25,26]
    B = A                                       #直接赋值
    C = A[:]                                    #浅拷贝
    D = copy.copy(A)                            #浅拷贝
    E = copy.deepcopy(A)                        #深拷贝
    
    #看看深拷贝与浅拷贝的区别
    #在A数组的最尾处加一个数
    A.append(99)
    #在A数组里面的数组最尾处加一个数
    A[4].append(66)
    
    print("起始列表A------------>",A)
    print("直接把A列表赋值给B---->",B)
    print("直接浅拷贝A列表给C---->",C)
    print("直接浅拷贝A列表给D---->",D)
    print("直接深拷贝A列表给E---->",E)
    运行结果如下:
    起始列表A------------> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26, 99] 直接把A列表赋值给B----> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26, 99] 直接浅拷贝A列表给C----> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26] 直接浅拷贝A列表给D----> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26] 直接深拷贝A列表给E----> [21, 22, 23, 24, ['a', 'b', 'c', 'd'], 25, 26]

    通过以上的例子我们来分析一下这几种复制列表的不同

    1、直接赋值,其实就是默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的B也会做相同的改变

    2、浅拷贝,没有拷贝子对象,所以原始数据改变,子对象也会改变

    3、深拷贝,包含对象里面的子对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变











  • 相关阅读:
    读取csv遇到的双循环
    hadoop环境配置
    mysql的查询
    mysql的基本操作
    mysql与python的交互
    设置自动获取IP和DNS
    pyecharts绘制地图
    集合 set方法
    字符串 string方法
    字典 dict方法
  • 原文地址:https://www.cnblogs.com/pychina/p/10171909.html
Copyright © 2011-2022 走看看