zoukankan      html  css  js  c++  java
  • python之浅拷贝与深拷贝

    浅拷贝与深拷贝:

    在python中对一个变量进行复制时,会分为浅拷贝与深拷贝。

    • 一般的赋值语句都类似于浅拷贝,即只拷贝对象的引用地址,而不是内容本身,当被拷贝对象发生了改变,
      这个变量也会跟着改变。
    • python中拷贝对象,要先导入copy模块。import copy
    • copy.copy():浅拷贝,创建一个新的对象,拷贝的是对象的引用。会随着拷贝对象的改变而改变。
    • copy.deepcopy():深拷贝,创建一个新的对象,拷贝的是对象的内容。独立于拷贝对象。
    # 赋值
    >>> a = [1,2,3]
    >>> b = a
    >>> id(a)
    140529081869448
    >>> id(b)
    140529081869448
    
    # 浅拷贝 和 深拷贝
    >>> import copy
    >>> a = [1,2,3]
    >>> b = [4,5,6]
    >>> c = [a,b]
    >>> d = copy.copy(c)
    >>> e = copy.deepcopy(c)
    >>> id(c)
    140529081869448
    >>> id(d)
    140529112566728  // 创建的新对象
    >>> id(e)
    140529081869704  // 创建的新对象
    # 向对象中添加新元素
    >>> a.append(4)
    >>> d
    [[1, 2, 3, 4], [4, 5, 6]]  // 浅拷贝随着原拷贝对象的改变而改变
    >>> e 
    [[1, 2, 3], [4, 5, 6]]  // 深拷贝独立于原拷贝对象
    # 原拷贝对象
    >>> c
    [[1, 2, 3, 4], [4, 5, 6]]
    
    

    copy.copy()支持检测数据类型:

    >>> a = [1,2,3]
    >>> b = [4,5,6]
    >>> c = [a,b] // 可变类型:列表
    >>> d = copy.copy(c)
    >>> id(c)
    140529081869256 
    >>> id(d)
    140529081863688 // 创建一个新对象
    
    >>> e = [1,2,3]
    >>> f = [4,5,6]
    >>> g = (e,f) // 不可变类型:元组
    >>> h = copy.copy(g) 
    >>> id(g)
    140529112564104
    >>> id(h)
    140529112564104  // 与原拷贝对象的id一致,说明并没有创建一个新对象,而是直接指向了原拷贝对象的引用
    

    更详细的介绍可以参看这个博客: url:http://blog.csdn.net/qq_32907349/article/details/52190796

  • 相关阅读:
    TCP流量控制和拥塞控制
    延迟确认和Nagle算法
    浅谈TCP三次握手和四次挥手
    中介者模式
    代理模式
    装饰者模式
    生成器模式(构建者模式)
    策略模式
    模板方法模式
    抽象工厂模式
  • 原文地址:https://www.cnblogs.com/AimeeCodeWorld/p/7766635.html
Copyright © 2011-2022 走看看