zoukankan      html  css  js  c++  java
  • python直接赋值、深浅拷贝实例剖析

    根据数据类型分为两部分进行剖析:

    • int、str类型     
    • list、tuple、dict类型等

    1.  int、str类型

    【int类型实例】
    >>> import copy                        # 导入copy模块
    >>> a1=11
    >>> a2=a1                              # 直接赋值引用
    >>> a3=copy.copy(a1)                   # 浅拷贝
    >>> a4=copy.deepcopy(a1)               # 深拷贝
    >>> id(a1),id(a2),id(a3),id(a4)
    >>> (1357559168, 1357559168,1357559168,1357559168)                            
    
    
    【str类型实例】
    >>> import copy                         # 导入copy模块
    >>> b1='css'
    >>> b2=b1                               # 直接赋值引用
    >>> b3=copy.copy(b1)                    # 浅拷贝
    >>> b4=copy.deepcopy(b1)                # 深拷贝
    >>> id(b1), id(b2),id(b3),id(b4)
    >>> (43826624,43826624,43826624,43826624)

    由以上实例可得出:int和str类型,无论是直接赋值引用 or 深浅拷贝,均指向同一块内存空间,因此对于int和str类型的变量而言,三种方法作用相同

    2. list、tuple、dict等类型(以list类型为例

    【示例】
    >>> import copy                          # 导入copy模块
    >>> L1=[11,22,33,['a','b','c']]      # 定义list变量,其中L1[3]的值是一个子列表
    >>> L2=L1                                 # 直接赋值引用
    >>> L3=copy.copy(L1)                # 浅拷贝
    >>> L4=copy.deepcopy(L1)         # 深拷贝
    >>> id(L1),id(L2),id(L3),id(L4)
    >>> (43777928,43777928,43776968,43795912)
    >>> L1.append(44)                    # L1列表父对象添加元素
    >>> L1[3].append('d')                # L1列表子对象添加元素
    >>> L1
    >>> [11,22,33,['a','b','c','d'],44]
    >>> L2
    >>> [11,22,33,['a','b','c','d'],44]
    >>> L3
    >>> [11,22,33,['a','b','c','d']]
    >>> L4
    >>> [11,22,33,['a','b','c']]

    以上示例说明:

    1. 直接赋值即是对象的引用,指向同一内存地址

    2. 浅拷贝:只拷贝一层,如上述示例,只拷贝父对象,不拷贝父对象内部的子对象(L3[3]仍指向原L1子对象的内存地址),故分别在L1父对象和子对象中添加元素44和'd', 对L3父对象无影响,只对其子对象有影响

    3. 深拷贝:拷贝父对象及子对象

    三人行,必有我师
  • 相关阅读:
    快速生成树协议 RSTP
    VLAN间路由
    二层交换机原理
    网络安全系统之四 PKI体系
    网络安全系统之三 数字证书
    生成树协议 STP
    网络安全系统之二 数字签名
    网络安全系统之一 加密算法
    系统可靠性
    DNS资源记录
  • 原文地址:https://www.cnblogs.com/lwp-king666/p/8338371.html
Copyright © 2011-2022 走看看