zoukankan      html  css  js  c++  java
  • 09 Python3 的深拷贝与浅拷贝

    • 深、浅拷贝不止 Python 有

    不妨从用法上看

    • 保险的做法就是使用 copy.deepcopy
    >>> import copy
    >>> a = [1, 2, 3, [4, 5, 6]]
    >>> b = copy.deepcopy(a)
    >>> 
    
    • 数据只有“一层”的话,使用分片或内置方法 copy()copy.copy 就行
    >>> a = [1, 2, 3]
    >>> b = a[:]
    >>> c = a.copy()
    >>> 
    >>> import copy
    >>> d = copy.copy(a)
    >>> 
    
    • 数据只有“一层”的话,使用工厂函数也行
    >>> a = [1, 2, 3]
    >>> b = list(a)
    

    补充

    • 复合对象谈深、浅拷贝才有意义
    • 复合对象:包含其他对象的对象,如列表、类实例等

    • 浅拷贝只拷贝第一层元素,故又称“顶层拷贝”
    • 若超过一层,浅拷贝后,“外壳”指向新的空间,其内部的元素仍指向原对象内部的元素
    • 可以认为 Python 能“偷懒”时必“偷懒”,有变化才分配内存
    • copy.deepcopy 也不是万能的,必要的时候可以重写方法

    • 常见的不可变对象,如 str, int, float, complex, bool,可以放心拷贝
    • tuple 有点特殊,虽然是不可变对象,但有层数,所以拷贝时需要注意“深浅”
    • 常见的可变对象,如 list, dict,拷贝时需要注意“深浅”
    • set 有点特殊,虽然是可变对象,但它的元素是可哈希的,也就意味着它里面是不可变对象,所以可以放心拷贝
  • 相关阅读:
    python little things
    python unittest
    install Pycrypto on windows
    share directory in virtualbox
    django template设置
    echarts使用记录
    node下图片自动处理
    Mac OS X 访问 Windows 共享文件夹
    django 登录配置记录
    【转】让iframe在iOS设备手机浏览器上支持滚动
  • 原文地址:https://www.cnblogs.com/yorkyu/p/10328162.html
Copyright © 2011-2022 走看看