• 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 完全拷贝了父对象及其子对象,两者完全独立

  • 相关阅读:
    Armbian hostname and WiFi configuration
    尼采的哲学
    深度学习 —— 使用 gensim 实现 word2vec
    sklearn preprocessing 数据预处理(OneHotEncoder)
    中英文对照 —— 饮食与美食
    matlab 常用机器学习算法的实现
    linux下svn常用指令
    Python创建删除文件
    php使用mysql和mysqli连接查询数据
    vsftpd配置文件详解
  • 原文地址:https://www.cnblogs.com/ElegantSmile/p/10681781.html
Copyright © 2020-2023  润新知