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']]
  • 相关阅读:
    shelve模块和xml模块
    time模块,random模块和shutil模块
    包的使用
    目录开发规范
    redis 初步认识四(redis锁,防并发)
    redis 初步认识三(设置登录密码)
    redis 初步认识二(c#调用redis)
    微信小程序 初步认识一(微信运动步数)
    redis 初步认识一(下载安装redis)
    c# 7.0 6.0 新语法
  • 原文地址:https://www.cnblogs.com/homle/p/13224781.html
Copyright © 2011-2022 走看看