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]



    
    
    
    
    
    


  • 相关阅读:
    923c C. Perfect Security
    hdu ACM Steps Section 1 花式A+B 输入输出格式
    我回来了
    POJ–2104 K-th Number
    bzoj1009: [HNOI2008]GT考试
    bzoj1875: [SDOI2009]HH去散步
    1898: [Zjoi2005]Swamp 沼泽鳄鱼
    Hadoop
    程序员的自我修养
    Effective C++笔记
  • 原文地址:https://www.cnblogs.com/bianhao89757/p/10239688.html
Copyright © 2011-2022 走看看