zoukankan      html  css  js  c++  java
  • copy-浅及深的复制操作

    一、浅拷贝:copy.copy

    copy对于一个复杂对象的子对象并不会完全复制,什么是复杂对象的子对象呢?就比如序列里的嵌套序列,字典里的嵌套序列等都是复杂对象的子对象。对于子对象,python会把它当作一个公共镜像存储起来,所有对他的复制都被当成一个引用,所以说当其中一个引用将镜像改变了之后另一个引用使用镜像的时候镜像已经被改变了。

    1)元组形式:

    import copy
    a=[1,2,3]
    b=[4,5,6]
    c=(a,b)
    e=copy.copy(c)
    print(c[0])#[1, 2, 3]
    print(e[0])#[1, 2, 3]
    a.append(4)
    print(c[0])#[1, 2, 3, 4]
    print(e[0])#[1, 2, 3, 4]
    print(id(c))#61398072
    print(id(e))#61398072
    print(c is e)#True

    可以看到:e和c是指向了同一个地址

    列表形式:

    import copy
    a=[1,2,3]
    b=[4,5,6]
    c=[a,b]
    e=copy.copy(c)
    print(c[0])#[1, 2, 3]
    print(e[0])#[1, 2, 3]
    a.append(4)
    print(c[0])#[1, 2, 3, 4]
    print(e[0])#[1, 2, 3, 4]
    print(id(c))#51304688
    print(id(e))#51304768
    print(c is e)#False

    可以看到:c和e指向了不同的地址,但是c和e里面的内容是指向了相同的地址

    2)深拷贝:

    deepcopy的时候会将复杂对象的每一层复制一个单独的个体出来,deep copy 更加符合我们对「复制」的直觉定义: 一旦复制出来了,就应该是独立的了。如果我们想要的是一个字面意义的「copy」,那就直接用 deep_copy 即可

    元组形式:

    import copy
    a=[1,2,3]
    b=[4,5,6]
    c=(a,b)
    e=copy.deepcopy(c)
    print(c[0])#[1, 2, 3]
    print(e[0])#[1, 2, 3]
    a.append(4)
    print(c[0])#[1, 2, 3, 4]
    print(e[0])#[1, 2, 3]
    print(id(c))#61132032
    print(id(e))#66655976
    print(c is e)#False

    列表形式:

    import copy
    a=[1,2,3]
    b=[4,5,6]
    c=[a,b]
    e=copy.deepcopy(c)
    print(c[0])#[1, 2, 3]
    print(e[0])#[1, 2, 3]
    a.append(4)
    print(c[0])#[1, 2, 3, 4]
    print(e[0])#[1, 2, 3]
    print(id(c))#52553888
    print(id(e))#52553968
    print(c is e)#False

    c和e指向了不同的地址,但是c和e里面的内容也指向了不相同的地址

  • 相关阅读:
    集群服务器登录退出出现问题
    TP框架中的Db::name 和 dB::table 以及 db('') 的区别
    TP5中orderRaw用法
    视差滚动 插件
    ThinkPad t480s 电源接口进水了
    file_put_contents failed to open stream: Permission denied in
    Mac 如何安装字体?
    ZipArchive::close(): Failure to create temporary file: Permission denied
    Wifi6 路由器推荐
    名词解释 | Enteric Nervous System | Enteric Neural Crest Cell | ENS | ENCC | 神经系统 | 神经嵴细胞
  • 原文地址:https://www.cnblogs.com/bashliuhe/p/12498133.html
Copyright © 2011-2022 走看看