• Python赋值语句与深拷贝、浅拷贝的区别


    参考:http://stackoverflow.com/questions/17246693/what-exactly-is-the-difference-between-shallow-copy-deepcopy-and-normal-assignm

    • 正常赋值语句会使左操作数简单地指向右操作数指向的对象。

    深拷贝和浅拷贝之间的区别仅对复合变量起作用,复合变量指的是对象中又包含了对象,如list,class,dict。

    • 一次浅拷贝会构造一个新的复合对象,然后将原始对象中的所有引用插入到新的复合对象中。
    • 一次深拷贝也会构造一个新的复合对象,但会递归地将原始对象中的所有对象拷贝一份到新的复合对象中。

    对于非复合变量, 赋值语句,深拷贝,浅拷贝都实现的是赋值语句功能。

    例子

    import copy
    a = [1, 2, 3]
    d = [4, 5, 6]
    c = [a, b]
    

    如果使用正常赋值语句:

    d = c
    
    print id(c) == id(d)			# True - d和c指向同一个对象
    print id(c[0]) == id(d[0])		# True - d[0]和c[0]当然也是同一对象
    

    使用浅拷贝的话:

    d = copy.copy(c)
    
    print id(c) == id(d)			# False - d是一个新对象,浅拷贝会构造一个新的复合对象
    print id(c[0]) == id(d[0])		# True	 - 但复合对象中的对象不会复制,和原来的指向一样
    

    使用深拷贝的话:

    d = copy.deepcopy(c)
    
    print id(c) == id(d)			# False - d同一是个全新的复合对象
    print id(c[0]) == id(d[0])		# False - 复合对象中对象也同样进行拷贝
  • 相关阅读:
    MFC中CTREECTRL的checkbox问题
    GLOG的使用说明
    安装Electron
    WIN32中DLL的建立
    MFC动态创建菜单
    C++迭代器
    VIM常用命令
    层次遍历二叉树
    sql存储过程中加引号
    Apache Tomcat 绿色版安装Service(服务)
  • 原文地址:https://www.cnblogs.com/echobfy/p/5040106.html
Copyright © 2020-2023  润新知