• 深拷贝与浅拷贝


    浅拷贝:拷贝了最外围的实体本身,内部的元素只是拷贝了一个引用,也就是说,把实体拷贝一遍,但是该实体中的其他实体不拷贝
    深拷贝:外围和内部的实体都会被拷贝,拷贝是实体本身,而不是引用
    
    变量  num = 10
    引用  num
    不可变实体:一旦创建就不能发生改变,包括数字,字符串,元组
    可变实体:可以进行修改的实体,包括列表,字典
    
    ​
    深浅拷贝的作用:减少内存的使用【以后做数据的清洗,修改或者其他操作的时候,对原数据拷贝一份,以防数据被修改之后,找不到原数据】
    ​
    一、对于不可变实体的深浅拷贝
    a = (1,2,3)
    1.浅拷贝
    1.1浅拷贝:=
    print("浅拷贝:=的拷贝")
    b = a
    print(a)
    print(b)
    print(id(a))
    print(id(b))
    ​
    1.2浅拷贝:copy()
    第一步:导入模块  import copy
    print("浅拷贝:copy的拷贝")
    c = copy.copy(a)
    print(a)
    print(c)
    print(id(a))
    print(id(c))
    ​
    2.深拷贝
    deepcopy()
    d = copy.deepcopy(a)
    print(a)
    print(d)
    print(id(a))
    print(id(d))
    ​
    print("**********************")
    ​
    二、可变实体的深浅拷贝
    a = [1,2,3]
    1.浅拷贝
    1.1=
    print("浅拷贝:=的拷贝")
    b = a
    print(a)
    print(b)
    print(id(a))
    print(id(b))
    ​
    1.2copy
    print("浅拷贝:copy的拷贝")
    c = copy.copy(a)
    print(a)
    print(c)
    print(id(a))
    print(id(c))
    ​
    2.深拷贝
    deepcopy()
    d = copy.deepcopy(a)
    print(a)
    print(d)
    print(id(a))
    print(id(d))
    ​
    
    总结:
    a.深浅拷贝都是对原实体的拷贝,区别在于是 实体的拷贝还是引用的拷贝【堆空间还是栈空间】
    b.不可变的实体:对于深浅拷贝毫无影响,最终的地址和值都是相等的
    c.可变的实体:
        =浅拷贝:值相等,地址相等
        copy浅拷贝:值相等,地址不相等
        deepcopy深拷贝:值相等,地址不相等
    

     

  • 相关阅读:
    转发与重定向的区别
    Servlet开发详讲
    Servlet的常见错误
    HTTP请求方式之POST和GET的区别
    Spring各种类型数据的注入
    Spring容器的基本使用
    Python接口自动化-测试用例编写
    Python接口自动化-设计测试用例
    python简明教程之数据结构(列表、元组、字典、集合)
    python简明教程之函数
  • 原文地址:https://www.cnblogs.com/URNOTBENBEN/p/13962846.html
Copyright © 2020-2023  润新知