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

    不用拷贝:

    list1=['a','b']
    list2=list1
    list1.append('c')
    print('list1')
    print(list1)
    print('list2')
    print(list2)
    

     结果:

     只用单纯的‘=’,没有产生新对象,从始至终用的是一个对象,所以,改变一个所有的都改变

    一、浅拷贝:

    产生新对象

    函数:copy

    简单的没有嵌套列表的拷贝

    list1=['a','b']
    list2=list1.copy()
    list1.append('c')
    print('list1')
    print(list1)
    print('list2')
    print(list2)
    

     结果:

     有嵌套的拷贝:

    list1=['a','b',[1,2,3,4]]
    list2=list1.copy()
    list1[2].append('100')
    print('list1')
    print(list1)
    print('list2')
    print(list2)
    

     结果

     结论:对于浅拷贝,拷贝时产生新对象,吧拷贝内容复制进去,但是,如果拷贝内容里有地址,拷贝后也用之前的地址,所以改变嵌套里面的值时,拷贝后的也会改变

     二、深拷贝:

    函数:deepcopy()

    模块:copy

    import copy
    list1=['a','b',[1,2,3,4]]
    list2=copy.deepcopy(list1)
    list1[2].append('100')
    print('list1')
    print(list1)
    print('list2')
    print(list2)
    

     结果:

     结论:深拷贝后产生对象,即使是引用的地址也重产生一个单独引用

     可以看到深拷贝之后两个对象是完全独立的,所以互不干扰

  • 相关阅读:
    设计模式 策略模式
    Java 集合 LinkedList的ListIterator
    Java 集合 JDK1.7的LinkedList
    Java 集合 集合与数组之间的转换
    Java Object 对象拷贝答疑
    Java Object 对象拷贝
    Java 集合 fail-fast机制 [ 转载 ]
    .net知识点汇总
    Javascript知识点汇总-初级篇
    Javascript实用技巧
  • 原文地址:https://www.cnblogs.com/jcb9426986/p/11628592.html
Copyright © 2011-2022 走看看