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']]
  • 相关阅读:
    蓝桥杯 奇怪的比赛
    历届试题 古堡算式
    PAT 甲级 1040 Longest Symmetric String (25 分)(字符串最长对称字串,遍历)
    PAT 甲级 1039 Course List for Student (25 分)(字符串哈希,优先队列,没想到是哈希)*...
    PAT 甲级 1038 Recover the Smallest Number (30 分)(思维题,贪心)
    PAT 甲级 1037 Magic Coupon (25 分) (较简单,贪心)
    那不是Bug,是新需求
    看看C# 6.0中那些语法糖都干了些什么(上篇)
    eclipse工具的使用心得
    送给那些刚进公司工作滴童鞋
  • 原文地址:https://www.cnblogs.com/gousheng123/p/12932551.html
Copyright © 2011-2022 走看看