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

    导入模块:

    >>> import copy

    深浅拷贝:

    >>> X = copy.copy(Y) #浅拷贝:只拷贝顶级的对象,或者说:父级对象
    >>> X = copy.deepcopy(Y) #深拷贝:拷贝所有对象,顶级对象及其嵌套对象。或者说:父级对象及其子对象

    例:

    >>> D = {'name':'jack','age':20}
    >>> C1 = copy.copy(D)
    >>> C2 = copy.deepcopy(D)
    >>> id(D);id(C1);id(C2)
    53035208
    53611144
    53610248
    >>> D['name'] = 'tom'   #改变源
    >>> D;C1;C2
    {'age': 20, 'name': 'tom'}
    {'age': 20, 'name': 'jack'}
    {'age': 20, 'name': 'jack'}

    如果有嵌套:

    D = {'name':{'first':'john','last':'lee'},'job':['IT','HR']}
    >>> C1 =  copy.copy(D)
    >>> C2 = copy.deepcopy(D)
    >>> D;C1;C2
    {'job': ['IT', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}
    {'job': ['IT', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}
    {'job': ['IT', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}
    >>> id(D);id(C1);id(C2)
    53018568
    53611592
    53610056
    >>> 
    >>> D['job'][0] = 'RRRR'   #修改其中一个元素
    >>> D;C1;C2
    {'job': ['RRRR', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}
    {'job': ['RRRR', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}
    {'job': ['IT', 'HR'], 'name': {'first': 'john', 'last': 'lee'}}

    #结论:
    (1)深浅拷贝都是对源对象的复制,占用不同的内存空间
    (2)如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象
    (3)如果源对象不止一级目录的话,源做任何改动,都要影响浅拷贝,但不影响深拷贝
    (4)序列对象的切片其实是浅拷贝,即只拷贝顶级的对象

  • 相关阅读:
    hdu 2485 Destroying the bus stations 迭代加深搜索
    hdu 2487 Ugly Windows 模拟
    hdu 2492 Ping pong 线段树
    hdu 1059 Dividing 多重背包
    hdu 3315 My Brute 费用流,费用最小且代价最小
    第四天 下载网络图片显示
    第三天 单元测试和数据库操作
    第二天 布局文件
    第一天 安卓简介
    Android 获取存储空间
  • 原文地址:https://www.cnblogs.com/ping-y/p/5845462.html
Copyright © 2011-2022 走看看