zoukankan      html  css  js  c++  java
  • Python 标准类库-数据类型之copy-深拷贝浅拷贝操作

    标准类库-数据类型之copy-深拷贝浅拷贝操作

     

    by:授客 QQ1033553122

    Python中赋值并不会拷贝对象,只是创建目标和对象的绑定关系。

     

    copy.copy(x)

    返回x的浅拷贝

     

    copy.deepcopy(x)

    返回x的深拷贝

     

    exception copy.error

    抛出模块指定的错误

    例子

    >>> import copy

    >>> lista = [["hi", "shouke"], 2018]

    >>> listb = copy.copy(lista)

    >>> id(lista), id(listb)

    (40713288, 51361160)

    >>> for item in lista:

    ...      print(id(item))

    ...

    51361032

    3944400

    >>> for item in listb:

    ...      print(id(item))

    ...

    51361032

    3944400

    如上,浅拷贝,拷贝的对象及被拷贝对象(例中分别为listb lista)id都不一样,但是两者所拥有的元素对象的id值是一样的


    对比试验

    >>> listb = copy.deepcopy(lista)

    >>> for item in listb:

    ...      print(id(item))

    ...

    51300488

    3944400

     

    如上,深拷贝,拷贝的对象及被拷贝对象(例中分别为listb lista)id都不一样,两者所拥有的元素对象的id值:

    1)如果是不可变对象,比如例中的整数,两者的id一样

    2)如果是可变对象,比如例子中的列表(["hi", "shouke"]),则两者的id值不一样。

     

    修改被拷贝对象的元素对象

    >>> lista[0].append('nihao')

    >>> lista

    [['hi', 'shouke', 'nihao'], 2018]

    >>> listb

    [['hi', 'shouke'], 2018]

     

    如上,深拷贝,拷贝的对象及被拷贝对象两者互不影响

     

    对比试验

    >>> listb = copy.copy(lista)

    >>> lista[0].remove('nihao')

    >>> lista

    [['hi', 'shouke'], 2018]

    >>> listb

    [['hi', 'shouke'], 2018]

    >>> lista[0].append('nihao')

    >>> lista

    [['hi', 'shouke', 'nihao'], 2018]

    >>> listb

    [['hi', 'shouke', 'nihao'], 2018]

     

    如上,类似c语言,浅拷贝,被拷贝对象拥有可变元素对象时,拷贝的对象及被拷贝对象两者会相互影响

     

     

     

     

     

     

     

     

  • 相关阅读:
    Hadoop命令大全
    Cube中时间维度
    无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
    IE6、IE7、IE8、FF对空标签块状元素解释的不同点
    SSIS导出平面文件数据带_x003C_none_x003E的问题
    用DB2 Runtime Client实现Apache Derby 数据库ODBC编程
    区块链技术探索
    JS原型对象
    this关键字
    消息认证码
  • 原文地址:https://www.cnblogs.com/shouke/p/10157495.html
Copyright © 2011-2022 走看看