zoukankan      html  css  js  c++  java
  • 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']]
  • 相关阅读:
    1592:【例 1】国王
    状态压缩类动态规划笔记
    1300:鸡蛋的硬度
    1263:【例9.7】友好城市
    第四部分-并发编程案例分析4:高性能数据库连接池HikariCP
    容器基础3:容器镜像
    第四部分-并发编程案例分析3:高性能队列Disruptor
    容器基础2:隔离与限制
    第四部分-并发编程案例分析1:限流Guava RateLimiter
    容器基础1:进程
  • 原文地址:https://www.cnblogs.com/gousheng123/p/12932551.html
Copyright © 2011-2022 走看看