zoukankan      html  css  js  c++  java
  • python中直接复制,浅拷贝,深拷贝

    • 直接复制:其实就是对象的引用
    • 浅拷贝(copy):拷贝父对象,不会拷贝对象内部的子对象
    • 深拷贝(deepcopy):完全拷贝父对象及其子对象

    字典浅拷贝:

    >>> a = {1:[1,2,3]}
    >>> b = a.copy()
    >>> a,b
    ({1: [1, 2, 3]}, {1: [1, 2, 3]})
    >>> a[1].append(4)
    >>> a,b
    ({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})

    深拷贝:

    >>> import copy
    >>> c = copy.deepcopy(a)
    >>> a,c
    ({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
    >>> a[1].append(5)
    >>> a,c
    ({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})

    1. b=a:赋值引用,a和b都指向同一对象。

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

     3. b=copy.deepcopy(a): 深拷贝,a和b完全拷贝了父对象和子对象,两者是完全独立的;

     关于深拷贝和浅拷贝实例:

    >>> import copy
    >>> a = [1,2,3,4,['a','b']]            #原始对象
    >>> b = a                              #赋值,传对象的引用
    >>> c = copy.copy(a)            #浅拷贝
    >>> d = copy.deepcopy(a)               #深拷贝
    >>> a.append(5)                        #修改对象a
    >>> a[4].append('c')                   #修改对象a中['a','b']数组对象
    >>> print('a = ',a)
    a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    >>> print('b = ',b)
    b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    >>> print('c = ',c)
    c =  [1, 2, 3, 4, ['a', 'b', 'c']]
    >>> print('d = ',d)
    d =  [1, 2, 3, 4, ['a', 'b']]
  • 相关阅读:
    注释代码片段
    更新docker时间-需要重启docker
    mysql随机查询若干条数据的方法
    Linux 块设备驱动 (一)
    Linux SD/MMC/SDIO驱动分析
    【转】Alsa音频编程【精华】
    goahead webserver源码分析
    【转】Linux系统调用列表
    Arm Linux系统调用流程详细解析
    Socket 相关的知识
  • 原文地址:https://www.cnblogs.com/homle/p/13224781.html
Copyright © 2011-2022 走看看