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']]
  • 相关阅读:
    Go语言学习之方法和接口
    Go语言学习之for循环
    Go语言学习之结构体
    Go语言学习之Map
    Go语言学习之值传递和引用传递解释And Go语言指针
    GO语言学习之切片(slice)
    GO语言学习之多维数组
    GO语言学习之数组
    GO语言学习之常用内置函数
    Oracle ORA28040报错解决
  • 原文地址:https://www.cnblogs.com/homle/p/13224781.html
Copyright © 2011-2022 走看看