zoukankan      html  css  js  c++  java
  • python中的赋值、浅拷贝和深拷贝

    1、对于不可变数据类型来说,没有深浅拷贝之分,这些操作都是将变量指向同一个地址空间,两者的id一样,如果对其重新赋值,也只是重新创建了一个对象,替换掉旧的。

    2、对于可变数据类型来说

    2.1 赋值 两者完全指向相同的地址空间id()一样,可变数据类型的改变会导致两者都改变。

    a = [1,2,3,4,[33,44,55]]
    c = a
    print(id(a),id(c))
    print(a,c)
    a[0]="改变"
    print(a,c)
    结果
    2352692648520 2352692648520
    [1, 2, 3, 4, [33, 44, 55]] [1, 2, 3, 4, [33, 44, 55]]
    ['改变', 2, 3, 4, [33, 44, 55]] ['改变', 2, 3, 4, [33, 44, 55]]
    

     2.2 浅拷贝 只拷贝最外面一层数据,无法拷贝第二层。两者只有独立的第一层地址空间,再深层的都指向相同的地址空间

    两者的id()不同,最外层地址空间不同

    import  copy
    a = [1,2,3,4,[33,44,55]]
    b = copy.copy(a)
    a[1]="你好"
    print(id(a),id(b))
    print(a,b)
    a[4][0]="zaoshanghao "
    print(a,b)
    结果
    2764463327880 2764463383048
    [1, '你好', 3, 4, [33, 44, 55]] [1, 2, 3, 4, [33, 44, 55]]
    [1, '你好', 3, 4, ['zaoshanghao ', 44, 55]] [1, 2, 3, 4, ['zaoshanghao ', 44, 55]]
    

     2.3 深拷贝 在内存中所有的数据都重新创建一份,彼此数据内存空间完全独立,互不影响

    import  copy
    a = [1,2,3,4,[33,44,55]]
    b = copy.deepcopy(a)
    a[1]="你好"
    print(id(a),id(b))
    print(a,b)
    a[4][0]="zaoshanghao "
    print(a,b)
    结果
    2427449952904 2427450008072
    [1, '你好', 3, 4, [33, 44, 55]] [1, 2, 3, 4, [33, 44, 55]]
    [1, '你好', 3, 4, ['zaoshanghao ', 44, 55]] [1, 2, 3, 4, [33, 44, 55]]
    

    I can feel you forgetting me。。 有一种默契叫做我不理你,你就不理我

  • 相关阅读:
    录屏软件 OBS Studio
    ubuntu安装以及美化
    win10系统软件安装列表
    GNSS数据的弱点
    理解TomoDD生成的地壳模型的格式
    acrobat DC install
    matlab平行运算 parrelpool
    写申请地震台网数据的申请表
    强震动数据的网站
    visual studio各个版本的key
  • 原文地址:https://www.cnblogs.com/weidaijie/p/9854550.html
Copyright © 2011-2022 走看看