zoukankan      html  css  js  c++  java
  • Python浅拷贝和深拷贝

    对于不可变数据类型:数字、字符串、元组,不论是浅拷贝还是深拷贝,都不会改变数据的地址。

    1.浅拷贝

    浅拷贝是顶层拷贝,拷贝顶层的可变数据类型。

    import copy
    
    #定义一个列表,其中第一个元素是可变类型。
    list1 = [[1,2], '33', 66];
    #进行浅copy
    list2 = copy.copy(list1);
    
    #对象地址是否相同。
    print(id(list1));
    print(id(list2));
    #结果:不同
    46177816
    46177936
    
    #第一个元素地址是否相同。
    print(id(list1[0]));
    print(id(list2[0]));
    #结果:相同
    46240432
    46240432
    
    #第二个元素地址是否相同。
    print(id(list1[1]));
    print(id(list2[1]));
    #结果:相同
    45547328
    45547328
    
    #改变第一个值,查看复制对象变化。
    list1[0][0] = 2;
    print(list2);
    #结果:复制对象发生变化
    [[2, 2], '33', 66]
    #改变第二个值,查看复制对象变化。
    list1[1] = '44';
    print(list2);
    #结果:复制对象没发生变了
    [[2, 2], '33', 66]
    

    2.深拷贝

    深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都不相同了。

    import copy
    
    #定义一个列表,其中第一个元素是可变类型。
    list1 = [[1,2], '33', 66];
    #进行深copy
    list2 = copy.deepcopy(list1);
    
    #对象地址是否相同。
    print(id(list1));
    print(id(list2));
    #结果:不同
    46177816
    46177936
    
    #第一个元素地址是否相同。
    print(id(list1[0]));
    print(id(list2[0]));
    #结果:不同
    49123856
    49588784
    
    #第二个元素地址是否相同。
    print(id(list1[1]));
    print(id(list2[1]));
    #结果:相同
    45547328
    45547328
    
    #改变第一个值,查看复制对象变化。
    list1[0][0] = 2;
    print(list2);
    #结果:复制对象没发生变了
    [[1, 2], '33', 66]
    #改变第二个值,查看复制对象变化。
    list1[1] = '44';
    print(list2);
    #结果:复制对象没发生变了
    [[1, 2], '33', 66]
    
  • 相关阅读:
    json数组去重
    java socket API
    java网络编程精解demo1---读取用户控制台的输入的数据并显示
    【CodeForces 489A】SwapSort
    【CSU 1556】Pseudoprime numbers
    【CodeForces 472A】Design Tutorial: Learn from Math
    【CodeForces 605A】BUPT 2015 newbie practice #2 div2-E
    【UVALive 3905】BUPT 2015 newbie practice #2 div2-D-3905
    【HDU 4925】BUPT 2015 newbie practice #2 div2-C-HDU 4925 Apple Tree
    【UVA 401】BUPT 2015 newbie practice #2 div2-B-Palindromes
  • 原文地址:https://www.cnblogs.com/tonylaoshi/p/14313888.html
Copyright © 2011-2022 走看看