• python---深浅拷贝


        这篇文章主要介绍了python中的拷贝问题,即不同的拷贝方式得到的新对象,对其进行修改是否影响原对象。了解这一块,首先需要了解数据类型,所以接下来从数据类型讲起。

        依据对象在内存中的组织分类,可以分为以下两种类型:

        一. 原子类型:只能保存单个字面对象的类型, 如数值(所有的数值类型),字符串(全部是文字)。

        二. 容器类型:可容纳多个对象的类型,如 列表,元祖,字典等

       对于原子类型,不存在深浅拷贝的说法,每一个不同的值代表一个新的对象。

     1 >>> import copy
     2 >>> d=23
     3 >>> e0=d
     4 >>> e1=copy.copy(d)
     5 >>> e2=copy.deepcopy(d)
     6 >>> e0=230
     7 >>> e1=231
     8 >>> e2=232
     9 >>> d, e0, e1, e2
    10 (23, 230, 231, 232)

    对于容器类型,有以下两种拷贝方式: ini=[12,  'beautiful',  ['we', 'are', 'a', 'team'] ]

    1)常见赋值

    等号赋值,等号两边指向的是同一个对象,等号左边是对象的别名,不管对别名还是自身操作修改的都是同一内存中的对象。即ini_0 是 ini.

     1 >>> ini=[12, 'beautiful', ['we', 'are', 'a', 'team']]
     2 >>> ini_0=ini
     3 >>> ini_0[0]=120
     4 >>> ini_0[1]='cute'
     5 >>> ini_0[2].append('world')
     6 >>> ini_0
     7 [120, 'cute', ['we', 'are', 'a', 'team', 'world']]
     8 >>> ini
     9 [120, 'cute', ['we', 'are', 'a', 'team', 'world']]
    10 >>>

    2)浅拷贝

    浅拷贝产生一个新的对象,但对象中的子对象指向的是原对象,代码效果如下:

     1 >>> ini
     2 [120, 'cute', ['we', 'are', 'a', 'team', 'world']]
     3 >>> ini_1=copy.copy(ini)
     4 >>> ini_1[0]=121
     5 >>> ini_1[1]='clever'
     6 >>> ini_1[2].remove('team')
     7 >>> ini_1
     8 [121, 'clever', ['we', 'are', 'a', 'world']]
     9 >>> ini
    10 [120, 'cute', ['we', 'are', 'a', 'world']]
    11 >>>

    也就是说,ini_1 不是ini, 但ini_1[i] 是 ini[i]。

    3)深拷贝

    深拷贝也产生一个新的对象,并且对象中的子对象不指向原对象的子对象,代码效果如下:

     1 >>> ini
     2 [120, 'cute', ['we', 'are', 'a', 'world']]
     3 >>> ini_2=copy.deepcopy(ini)
     4 >>> ini_2[0]=122
     5 >>> ini_2[1]='happy'
     6 >>> ini_2[2].append('family')
     7 >>> ini
     8 [120, 'cute', ['we', 'are', 'a', 'world']]
     9 >>> ini_2
    10 [122, 'happy', ['we', 'are', 'a', 'world', 'family']]
    11 >>>

    也就是说,ini_2 不是ini, 但ini_2[i] 也不是 ini[i]。

  • 相关阅读:
    收集一些特殊的符号
    腾讯笔试有感
    Lazy Load, 延迟加载图片的 jQuery 插件
    腾讯实习生笔试题
    IE捉迷藏bug详解(躲猫猫)
    使用SQL Server 2000 全文检索
    一篇比较不错的关于masterpage的文章
    ASP.NET中对表单输入行有选择验证
    在WSS中高亮显示搜索结果
    WebPart安装位置对FrontPager的影响
  • 原文地址:https://www.cnblogs.com/no-tears-girl/p/7592990.html
Copyright © 2020-2023  润新知