zoukankan      html  css  js  c++  java
  • Python中关于深复制和浅复制详细解释

      

    1、copy属性
    
    S = {1,2,3,4}
    
    D = {'a':1,'b':2}
    
     
    
    #在python3.0中 只有set和dict有copy属性,其余都没有
    
    print(S.copy())
    
    print(D.copy())
    
     
    
     
    
    2、copy模块中的copy方法
    
    import copy
    
    #当字典,列表,元组中嵌套时
    
    L=[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]]
    
    #浅复制,所谓的浅复制是当里面嵌套时,公用嵌套对象
    
    L_copy = copy.copy(L)
    
    print(L_copy)  #输出:[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]]
    
    print(L)    #输出[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]]:
    
    L[3][0]=100
    
    print(L_copy)  #输出:[1,2,3,[100,2,3,4],[5,6,7,[1,3,4]]]
    
    print(L)    #输出:[1,2,3,[100,2,3,4],[5,6,7,[1,3,4]]]
    
    L_copy[3][0]=-100
    
    print(L_copy)  #输出:[1,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]]
    
    print(L)    #输出:[1,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]]
    
    #因为里面嵌套的对象是公用的。所以相互影响
    
    L[0]=1111
    
    print(L)       #输出:[1111,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]]
    
    print(L_copy)  #输出:[1,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]]
    
    #顶层的对象不是通用的,所以不影响
    
    print('*'*8)
    
    #深复制,所谓的深复制是当里面嵌套时,不公用嵌套对象
    
    L_copy = copy.deepcopy(L)
    
    print(L_copy)  #输出:[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]]
    
    print(L)    #输出[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]]:
    
    L[3][0]=100
    
    print(L_copy)  #输出:[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]]
    
    print(L)    #输出:[1,2,3,[100,2,3,4],[5,6,7,[1,3,4]]]
    
    L_copy[3][0]=-100
    
    print(L_copy)  #输出:[1,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]]
    
    print(L)    #输出:[1,2,3,[100,2,3,4],[5,6,7,[1,3,4]]]
    
    #因为里面嵌套的对象不是公用的。所以没有影响
    
    L[0]=1111
    
    print(L)       #输出:[1111,2,3,[100,2,3,4],[5,6,7,[1,3,4]]]
    
    print(L_copy)  #输出:[1,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]]
    
    #顶层的对象不是通用的,所以不影响
    
    3、分片复制时浅复制
    
    L = [1,2,3,[4,6,42]]
    
    L_copy =  L[:]
    
    print(L)  #输出[1,2,3,[4,6,42]]
    
    print(L_copy)  #输出[1,2,3,[4,6,42]]
    
    L[3][0]=-100
    
    print(L)  #输出[1,2,3,[-100,6,42]]
    
    print(L_copy)  #输出[1,2,3,[-100,6,42]]
    
     
    
    总结一下就是:
    
    浅复制共享内嵌对象,深复制重新创建一个新对象
    

      

  • 相关阅读:
    WRF WPS预处理
    CVS安装
    Linux窗口最小化消失,任务栏上无法找到的解决方法
    NCARG安装配置出现error while loading shared libraries: libg2c.so.0问题额解决办法
    Netcdf安装
    Embedding R-generated Interactive HTML pages in MS PowerPoint(转)
    The leaflet package for online mapping in R(转)
    Some 3D Graphics (rgl) for Classification with Splines and Logistic Regression (from The Elements of Statistical Learning)(转)
    What does a Bayes factor feel like?(转)
    Weka算法介绍
  • 原文地址:https://www.cnblogs.com/hbcb533/p/3669275.html
Copyright © 2011-2022 走看看