zoukankan      html  css  js  c++  java
  • Python基础(五):列表的深浅复制

    首先我们需要明确列表的深浅复制是针对被嵌套的列表而言的,也就是说只有对嵌套列表我们才需要考虑这个问题。来看例子。

    list1=['老大','老二',['老三','老四','老五'],'老六','老七']
    list2=list1.copy()
    print(list1,'
    ',list2)                    #打印两个列表
    print(id(list1),'
    ',id(list2))          #打印两个列表的地址
    print(id(list1[2]),'
    ',id(list2[2])) #打印两个嵌套列表的地址

    运行结果

    ['老大', '老二', ['老三', '老四', '老五'], '老六', '老七'] 
     ['老大', '老二', ['老三', '老四', '老五'], '老六', '老七']
    3072878348 
     3072561644
    3072841164 
     3072841164

    从结果中可以看出,虽然list1与liat2的地址相同,但是嵌套的列表['老三', '老四', '老五']却有着相同的地址。这就是一种浅复制。如果此时我们修改嵌套列表的值。两个列表就都会发生改变。看下面的代码。

    list1[2][1]='哈哈哈'
    print(list1,'
    ',list2)

    运行结果

    ['老大', '老二', ['老三', '哈哈哈', '老五'], '老六', '老七'] 
     ['老大', '老二', ['老三', '哈哈哈', '老五'], '老六', '老七']

    其实原理非常简单,中间被嵌套的列表实际上是单独被分配的空间,然后list1和list2都是去引用的地址,所以当它的值改变,两个列表就都跟着变了。

    深复制

    深复制需要用到copy模块,来看例子。

    import copy
    list1=['老大','老二',['老三','老四','老五'],'老六','老七']
    list2=copy.deepcopy(list1)
    print(list1,'
    ',list2)    #打印两个列表
    print(id(list1),'
    ',id(list2))    #打印两个列表的地址
    print(id(list1[2]),'
    ',id(list2[2])) #打印两个嵌套列表的地址

    结果

    ['老大', '老二', ['老三', '老四', '老五'], '老六', '老七'] 
     ['老大', '老二', ['老三', '老四', '老五'], '老六', '老七']
    3071562732 
     3071928940
    3071600076 
     3071600108

    这是我们如果修改嵌套的列表的值,两个列表会发生什么变化呢?

    list1[2][1]='哈哈哈'
    print(list1,'
    ',list2)

    结果

    ['老大', '老二', ['老三', '哈哈哈', '老五'], '老六', '老七'] 
     ['老大', '老二', ['老三', '老四', '老五'], '老六', '老七']
  • 相关阅读:
    微信授权页面执行ajax不执行,刷新才能执行
    spring boot使用jpa的@Modify的clearAutomatically=true的作用
    Excel转HTML
    reporting reportservice(SSRS) 让某行变成自增序号
    Excel的操作插件
    https-加解密
    防篡改防重
    加密解密
    git 常用命令

  • 原文地址:https://www.cnblogs.com/austinjoe/p/9379289.html
Copyright © 2011-2022 走看看