zoukankan      html  css  js  c++  java
  • python中浅拷贝和深度拷贝

    python中浅拷贝和深度拷贝

    一、总结

    一句话总结:

    1、浅拷贝(copy()):拷贝父对象,不会拷贝对象的内部的子对象,复制的对象和原来的对象中的子对象中的不可变数据类型互不影响,子对象中的可变数据类型共用
    2、深拷贝(copy.deepcopy()):完全拷贝父对象跟子对象,复制的对象和原来的对象互不相关

    二、python中浅拷贝和深度拷贝的区别

    博客对应课程的视频位置:

    在很多面试题中都会问到浅拷贝跟深度拷贝的区别,这里就简单举栗子讲一下两者的区别。

    浅拷贝(copy()):拷贝父对象,不会拷贝对象的内部的子对象,复制的对象和原来的对象中的子对象中的不可变数据类型互不影响,子对象中的可变数据类型共用

    深拷贝(copy.deepcopy()):完全拷贝父对象跟子对象,复制的对象和原来的对象互不相关

    import copy
    
    l = [1, 2, ['a', 'b']]
    s_copy = l.copy()  # 浅拷贝
    d_copy = copy.deepcopy(l)  # 深拷贝
    l.append(3)
    l[2].append('c')
    
    print(l)  # [1, 2, ['a', 'b', 'c'], 3]
    print(s_copy)  # [1, 2, ['a', 'b', 'c']]
    print(d_copy)  # [1, 2, ['a', 'b']]

    通过上面的输出结果可以很好的看到,深拷贝是直接复制了所有的父对象跟子对象,原来的不管怎么变都跟他没关系,浅拷贝只是复制了当前的父对象,如果子对象发生变化,浅拷贝也是会跟着改变的。

    深入解析:

    1、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。

    2、b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

    通常来讲不可变元素包含:

    int,float,complex,long,str,unicode,tuple

    转自或参考:python中浅拷贝和深度拷贝的区别 - 如何好听 - 博客园
    https://www.cnblogs.com/zzqit/p/10229059.html

     
  • 相关阅读:
    .NET面试题系列[2]
    .NET面试题系列[1]
    被淡忘的c#析构函数
    关于Spring IOC容器解释
    工作随笔记 点击除div自身之外的地方,关闭自己
    js获得控件位置
    PHP如何判断对象为空的方法分享
    PHP 网页调用本地exe程序实例
    PHP jQuery实现上传图片时预览图片的功能实例
    Yii 自带的分页实例
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/13217593.html
Copyright © 2011-2022 走看看