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)序列对象的切片其实是浅拷贝,即只拷贝顶级的对象

  • 相关阅读:
    希尔排序算法
    直接插入排序和折半插入排序算法
    快排序算法
    部分博文目录索引(C语言+算法)
    Gnome排序算法
    选择排序算法
    pip运行报错Fatal error in launcher: Unable to create process using pip.exe
    Java Selenium封装--RemoteWebDriver
    Java Selenium封装--RemoteWebElement
    selenium webdriver自动化对日期控件的处理
  • 原文地址:https://www.cnblogs.com/ping-y/p/5845462.html
Copyright © 2011-2022 走看看