zoukankan      html  css  js  c++  java
  • python列表中的赋值与深浅拷贝

    首先创建一个列表

    a=[[1,2,3],4,5,6]

    一、赋值

    a=[[1,2,3],4,5,6]
    b=a
    a[0][1]='tom'
    print(a)
    print(b)
    结果:

    [[1, 'tom', 3], 4, 5, 6]
    [[1, 'tom', 3], 4, 5, 6]

    a=[[1,2,3],4,5,6]
    b=a
    b[0][1]='tom'
    print(a)
    print(b)
    结果:
    [[1, 'tom', 3], 4, 5, 6]
    [[1, 'tom', 3], 4, 5, 6]
    总结:赋值不管是对a列表改变还是对b列表改变,
    只要改变其中一个,另一个也会跟着变,这是因为a
    和b共用一块内存,没有创建新的内存,
    他们是相同的,他们指向同一个内存区域。

    二、浅拷贝 [:]or copy()

    a=[[1,2,3],4,5,6]
    b=a.copy()
    b[0][1]='tom'
    print(a)
    print(b)
    结果: 

        [[1, 'tom', 3], 4, 5, 6]
        [[1, 'tom', 3], 4, 5, 6]

    a=[[1,2,3],4,5,6]
    b=a.copy()
    a[0][1]='tom'
    print(a)
    print(b)
    结果:
    [[1, 'tom', 3], 4, 5, 6]
    [[1, 'tom', 3], 4, 5, 6]

    a=[[1,2,3],4,5,6]
    b=a.copy()
    b[1]='tom'
    print(a)
    print(b)
    结果:

       [[1, 2, 3], 4, 5, 6]
       [[1, 2, 3], 'tom', 5, 6]

    a=[[1,2,3],4,5,6]
    b=a.copy()
    a[1]='tom'
    print(a)
    print(b)
    结果:

       [[1, 2, 3], 'tom', 5, 6]
       [[1, 2, 3], 4, 5, 6]

    总结:从上面代码可以看出来浅拷贝是重新开辟一块内存,拷贝第一层数据,不拷贝内部子元素

    在本代码中,b列表重新开辟了一块内存放元素【b【0】,4,5,6】,也就是第一层内容,

    然后b【0】的位置指向了a【0】指向的内存位置

    三、深拷贝   使用copy函数

    重新开辟一块内存,存放拷贝列表的所有内容。a集合与b集合互不影响

    import copy
    a=[[1,2,3],4,5,6]
    b=copy.deepcopy(a)
    a[1]='tom'
    print(a)
    print(b)
    结果:

      [[1, 2, 3], 'tom', 5, 6]
       [[1, 2, 3], 4, 5, 6]

    import copy
    a=[[1,2,3],4,5,6]
    b=copy.deepcopy(a)
    b[1]='tom'
    print(a)
    print(b)
    结果:

      [[1, 2, 3], 4, 5, 6]
      [[1, 2, 3], 'tom', 5, 6]

    import copy
    a=[[1,2,3],4,5,6]
    b=copy.deepcopy(a)
    b[0][1]='tom'
    print(a)
    print(b)
    结果;

      [[1, 2, 3], 4, 5, 6]
      [[1, 'tom', 3], 4, 5, 6]

    import copy
    a=[[1,2,3],4,5,6]
    b=copy.deepcopy(a)
    a[0][1]='tom'
    print(a)
    print(b)
    结果:

      [[1, 'tom', 3], 4, 5, 6]
       [[1, 2, 3], 4, 5, 6]

    copy函数也可以浅拷贝:

    import copy
    a=[[1,2,3],4,5,6]
    b=copy.copy(a)
    a[0][1]='tom'
    print(a)
    print(b)
    结果:

       [[1, 'tom', 3], 4, 5, 6]
       [[1, 'tom', 3], 4, 5, 6]



    
    
    
    
    
    


  • 相关阅读:
    mysql只会使用到一个索引的原因
    SQL优化-三
    SQL优化-二
    SQL优化-一
    关于调和级数的证明
    SA 复习笔记
    点分治学习笔记
    FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ
    python3+selenium webdriver实战应用篇-打造爱奇艺直播间机器人
    Photoshop如何修改(半)透明像素的RGB值
  • 原文地址:https://www.cnblogs.com/bianhao89757/p/10239688.html
Copyright © 2011-2022 走看看