zoukankan      html  css  js  c++  java
  • Python【每日一问】01

    问:深拷贝、浅拷贝、直接赋值的区别是什么?并举例说明

    1.区别

    (1)直接赋值对象的引用

    (2)浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象

    (3)深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象

    定义说得有点抽象,简而言之:

    深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用

    假设B复制了A,修改A的时候,看B是否发生变化:

    (1)如果B跟着也变了,说明是浅拷贝,

    (2)如果B没有改变,说明是深拷贝

    2.举例说明

    (1)直接赋值

    # 直接赋值
    # 定义列表
    names = ["test1","test2","test3",["kangkang","mike"],"test4","test5"]
    # 直接赋值
    names1 = names #无论 names中修改了什么,names与names1保持完全一致
    # 修改原列表
    names[1] = "test6"
    names[-3][0] = "nice"
    # 打印结果
    print("names:",names)
    print("names1:",names1)

    输出结果:

    names: ['test1', 'test6', 'test3', ['nice', 'mike'], 'test4', 'test5']
    names1: ['test1', 'test6', 'test3', ['nice', 'mike'], 'test4', 'test5']

    解析:直接赋值,names 和 names1 指向同一个对象

    (2)浅拷贝

    # 浅拷贝
    # 定义列表
    names = ["test1","test2","test3",["kangkang","mike"],"test4","test5"]
    # 浅拷贝列表
    names1 = names.copy()
    # 修改原列表 names
    names[1] = "test6"
    names[-3][0] = "nice"
    # 打印
    print("names:",names)
    print("names1:",names1)

    输出结果:

    names: ['test1', 'test6', 'test3', ['nice', 'mike'], 'test4', 'test5']
    names1: ['test1', 'test2', 'test3', ['nice', 'mike'], 'test4', 'test5']

    解析:浅拷贝,拷贝父对象,不会拷贝对象的内部的子对象,他们的子对象 Y 还是指向同一个对象

    (3)深拷贝

    # 深拷贝
    # 引入 copy 模块
    import copy
    names = ["test1","test2","test3",["kangkang","mike"],"test4","test5"]
    names1 = copy.deepcopy(names)
    # 修改原列表
    names[-3][0] = "ken"
    # 打印结果
    print("names:",names)
    print("names1:",names3)

    输出结果:

    names: ['test1', 'test2', 'test3', ['ken', 'mike'], 'test4', 'test5']
    names1: ['test1', 'test2', 'test3', ['kangkang', 'mike'], 'test4', 'test5']

    解析:深拷贝,names 和 names1 完全拷贝了父对象及其子对象,两者完全独立

  • 相关阅读:
    muduo 库解析之四:TimeZone
    muduo 库解析之三:Date
    muduo 库解析之九:Condition
    muduo 库解析之八:Mutex
    muduo 库解析之七:Atomic
    [linux]查看文件目录是否为硬链接
    [go] 解决:concurrent write to websocket connection
    [windows] 保存浏览器网页长截图
    [项目] 系统迁移的几个注意点
    [MySQL] order by field 自定义排序
  • 原文地址:https://www.cnblogs.com/ElegantSmile/p/10681781.html
Copyright © 2011-2022 走看看