• python基础之列表深浅复制的问题


      在python中我们对一个列表的复制最常用的方法就是将该列表直接赋值给另一个变量,而实际上对象赋值实际上是对象的引用,python并没有完全复制这个对象,而只是复制了这个对象的引用。因此当原始的列表数据发生改变时,被赋值的列表也会改变,例如:

    names = ['Kobe','James','Jordan','Curry',['Green','Durnt']]
    names01 = names
    print(names)        #打印结果:['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Durnt']]
    print(names01)      #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Durnt']]
    
    names[4][1]= 'Paul'
    print(names)        #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Paul']]
    print(names01)      #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Paul']]

      其实python列表的操作中自带了一个关于复制的方法,使用方法如:names02 = names.copy(),又称浅复制,拷贝父对象,浅复制并没有拷贝子对象,所以原始数据改变,对父对象进行操作时新列表不变,但对子对象操作时新的列表会改变,例如:

    names02 = names.copy()
    print(names)        #打印结果:['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Durnt']]
    print(names02)      #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Durnt']]
    
    #对父对象进行操作
    names[0] = 'KD'
    print(names)        #['KD', 'James', 'Jordan', 'Curry', ['Green', 'Paul']]
    print(names02)      #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Paul']]
    
    #对子对象进行操作
    names[4][1] = 'TT'
    print(names)        #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'TT']]
    print(names02)      #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'TT']]

      为了解决出现的这种原始数据改变却能影响新的列表数据的情况,深复制完美解决了这个问题。深复制是copy模块的 deepcopy方法,完全拷贝了父对象及其子对象,所以无论原始对象的改变不会造成深拷贝里任何子元素的改变,举例情况如下:

    import copy
    names03 = copy.deepcopy(names)
    print(names)        #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Durnt']]
    print(names03)      #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Durnt']]
    
    #改变父对象操作
    names[0] = 'KD'
    print(names)        #['KD', 'James', 'Jordan', 'Curry', ['Green', 'Durnt']]
    print(names03)      #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Durnt']]
    
    #改变子对象操作
    names[4][1] = 'TT'
    print(names)        #['KD', 'James', 'Jordan', 'Curry', ['Green', 'TT']]
    print(names03)      #['Kobe', 'James', 'Jordan', 'Curry', ['Green', 'Durnt']]
  • 相关阅读:
    模拟Spring创建Bean和dom4j读取xml文件(视频学习传智播客Spring2.503)
    三种实例化Bean的方式
    junit4测试用例
    Spring注解方式管理事务以及事务传播行为Propagation(视频笔记23)
    Hibernate注解Annotation
    SSH框架整合(二)
    Oracle命令行中启动服务创建用户,权限,密码丢失
    Spring事务管理
    嚯嚯~~第一篇
    fedora下配置dhcpv6服务器
  • 原文地址:https://www.cnblogs.com/gousheng123/p/12932551.html
Copyright © 2020-2023  润新知