zoukankan      html  css  js  c++  java
  • Python基础知识(六)—关于列表深拷贝和浅拷贝及内存图

    # list01 是变量,存储列表对象的地址.
    #列表引用
    list01 = ["张无忌","赵敏","周芷若"]
    # list02 得到的是列表对象地址
    list02 = list01 # 不拷贝,创建了一个变量绑定原对象
    list01[0] = "老张"   # 修改的是列表list01第一个元素存储的对象地址
    print(list02[0])# ?"老张"# 因为list02和list01绑定的是同一个对象地址,虽然改变了对象里面的元素,但是对象地址没变,因此list02也跟着修改了

    list01 = ["张无忌","赵敏","周芷若"]
    list02 = list01
    list01 = "老张"  # 修改的是变量list01绑定的对象地址
    print(list02[0])# ?"张无忌"# list01绑定的对象地址改变了。而list02依然绑定的是原对象地址

    浅拷贝 shallow copy
          浅拷贝是指在复制过程中,只复制一层变量,不会复制深层变量绑定的对象的复制过程
    list01 = ["张无忌","赵敏","周芷若"]
    list02 = list01[:] (等同于list02=list01.copy())
    # 通过切片复制新列表(拷贝了列表中的变量,新列表中变量依然绑定list01的对象地址,而不是绑定list01的原对象)
    list01[0] = "老张" print(list02[0])# ?"张无忌"

    list01 = ["张无忌",["赵敏","周芷若"]]
    list02 = list01#  不拷贝,创建了一个变量绑定了原对象
    # 修改列表第二个元素的第二个元素
    list01[1][1] = "芷若"
    print(list02[1][1])    #"芷若"#修改了原对象地址,所以list02改变了

    list01 = ["张无忌",["赵敏","周芷若"]]
    list02 = list01[:]
    list02 = list01.copy() # 浅拷贝
    list01[1][1] = "芷若"
    print(list02[1][1])    # 芷若

    import copy
    
    list01 = ["张无忌",["赵敏","周芷若"]]
    list02 =copy.deepcopy(list01)  # 深拷贝(重新创建了一个对象和对象地址,绑定了新的对象和对象地址,因此原对象和对象地址的改变与新的无关)
    list01[1][1] = "芷若"
    print(list02[1][1]) # 周芷若

  • 相关阅读:
    用命令创建MySQL数据库
    Linux下安装mysql
    MySQL字符集及校对规则的理解
    Mybatis 高级结果映射 ResultMap Association Collection
    查看linux系统版本命令
    hdu 1217 Arbitrage (最小生成树)
    hdu 2544 最短路(两点间最短路径)
    hdu 3371 Connect the Cities(最小生成树)
    hdu 1301 Jungle Roads (最小生成树)
    hdu 1875 畅通工程再续(prim方法求得最小生成树)
  • 原文地址:https://www.cnblogs.com/maplethefox/p/10836031.html
Copyright © 2011-2022 走看看