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]) # 周芷若

  • 相关阅读:
    Angular相关UI框架的安装
    Visual Studio Code 编辑器常用插件
    Groovy特性
    Notification(Android)消息推送机制
    Sublime SVN插件使用方法 PS:翻出来的旧笔记,现在Sublime和svn用的都不多了
    Python基本语法练习笔记(一)
    首篇博文占坑
    apache2修改用户和组
    如何修改script.bin/script.fex
    perl的INC设置
  • 原文地址:https://www.cnblogs.com/maplethefox/p/10836031.html
Copyright © 2011-2022 走看看