主要理解新与旧究竟在哪里 这样也就理解了 深浅拷贝

先说说赋值,事实上python中的赋值事实上是赋值了一个引用。比如:

foo1=1.0

foo2=foo1

用操作符is推断时。你能够发现结果是true。是由于python是先创建了一个对象1.0,然后这个对象的引用又被赋值给了foo1和foo2,可是假设是这样:

foo1=1.0

foo2=1.0

这时你会发现。这事实上是创建了两个不同的对象。用内建函数id()能够发现,二者的身份不同。

事实上python另一个特例,比如:

a=1

b=1

你会发现id(a)=id(b),原因是python觉得这些小整型是会经经常使用到的,所以python会缓存一部分小整型。

其次再说说浅拷贝和深拷贝。

序列类型的能够通过三种方式实现浅拷贝,浅拷贝也是默认的拷贝类型:(1)全然切片操作;(2)利用工厂函数。比方list()等;(3)使用copy模块中的copy()函数。然而对于非容器类型没有拷贝这这一说。在《python核心编程》一书中说道,“对一个对象进行浅拷贝事实上是新创建了一个类型跟原对象一样。其内容是原来对象元素的引用,换句话说。这个拷贝的对象本身是新的。可是它的内容不是”读完这句话我的理解是浅拷贝事实上是赋值,但后来发现不然,由于赋值的结果是他们的身份同样。可是浅拷贝的身份却不同,以下我结合书上的样例以及我自己的想法来说明这句话是什么意思。

fanwei@ubuntu:~$ python

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)

[GCC 4.4.3] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> person=['name',['saveing',100]]

>>> wife=person[:]

>>> hubb=list(person)

>>> id(person)

3078619916L

>>> id(wife)

3078621548L

>>> id(hubb)

3078621996L

从代码的结果能够看出hubb和wife尽管是person浅拷贝的结果可是他们身份却不同。再看看他们的内容
>>>[id(x) for x in hubby]
[3078622112L,3078534412L]
>>>[id(x) for x in wife]
[3078622112L,3078534412L]
二者内容的身份却是一样的。

从这一点能够看出所谓的“拷贝对象本身是新的“就是之前代码验证的person、hubb和wife的身份不同。”内容是旧的“就是我们刚刚验证的,所以说事实上内容的浅拷贝能够看做是”赋值“。你会发现,假设我们将hubb中的’100‘改成’50‘,wife中的’100‘也变成了’50‘这就说明事实上内容的浅拷贝就是”赋值“即两个引用指向同一个对象,改变后二者的身份还是同样。

此外,因为hubb[0]、wife[0]是字符串,所以他们没有拷贝一说。是创建了一个新的类型。所以当把二者中的’name‘改名后,他们的身份就不同了。对于深拷贝无论是对象和内容身份都是不同的。这点就不再多说了。

如今。应该明确所谓的”对象本身是新的。内容是旧的“这句话的真正含义了吧。

python 深浅拷贝 进阶的更多相关文章

  1. Python开发【第二章】:Python深浅拷贝剖析

    Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 ...

  2. 小学生都能学会的python(深浅拷贝)

    小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...

  3. 【0806 | Day 9】三张图带你了解数据类型分类和Python深浅拷贝

    一.数据类型分类 二.Python深浅拷贝

  4. 底层剖析Python深浅拷贝

    底层剖析Python深浅拷贝 拷贝的用途 拷贝就是copy,目的在于复制出一份一模一样的数据.使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不 ...

  5. 关于python深浅拷贝的个人浅见

    起初,关于python的深浅拷贝,总是习惯去用传值传址的方式去考虑,发现总是get不到规律,容易记混. python有着高度自治的内存管理,而不可变对象的内存分配,则是能省则省,就是说,无论用什么拷贝 ...

  6. python深浅拷贝与赋值

    初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...

  7. python深浅拷贝&垃圾回收&上下文管理(with语句)

    深浅拷贝 在Python中使用copy模块用于对象的拷贝操作. 该模块提供了两个主要的方法:浅拷贝 copy.copy() 深拷贝 copy.deepcopy() 1.浅拷贝(copy) 浅拷贝: 不 ...

  8. 关于Python深浅拷贝

    拷贝: 说明:原则上就是把数据分离出来,复制其数据,并以后修改互不影响. 何来深浅拷贝的说法? 深浅拷贝的“深”和“浅”可以理解为从变量到硬盘上的物理存储介质之间的层次的多少. 下面用一个示例来解释浅 ...

  9. python 深浅拷贝 for循环删除

    ###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...

随机推荐

  1. 今日SGU 5.13

    SGU 146 题意:就是给你一个长度为l的圈,然后你跑步,每一段给你时间t和速度v,问你最后离起点多远 收获:就是把浮点数转为整数,然后但是会出现精度误差,比如l最多四位小数,那你就加0.00001 ...

  2. Windows系统的关机、休眠和睡眠状态究的区别

    原文:Windows系统的关机.休眠和睡眠状态究的区别 相信有些小伙伴跟我一样,对电脑的一些常用操作或名词不太熟悉,今天我们就简单来聊聊电脑的关机.休眠和睡眠状态究竟有何区别吧! 如果你在电脑左下角的 ...

  3. 【Uva 242】Stamps and Envelope Size

    [Link]: [Description] 给你n个集合; 每个集合都包含一些不同面额的邮票; (每种邮票都当做有无限张) 然后给你一封信上最多能贴的邮票张数S; 问你,哪一个集合的邮票; 能够贴出来 ...

  4. Dynamics CRM2013/2015 插件注冊工具登录后无法显示assembly列表问题的解决的方法

    自微软从2013版本号推出新的插件注冊器后,随着UI的重大更新后,问题也多了非常多.前面已有博客提到注冊assembly时看不到注冊button(http://blog.csdn.net/vic022 ...

  5. 从零開始制作H5应用(2)——V2.0版,多页单张图片滑动,透明过渡及交互指示

    上一次.我们制作了我们第一个H5场景应用的V1.0版,这次我们趁热打铁.在上一版的基础上对层序进行改动和扩展. 任务 1.页面数量由3张增加至9张: 2.每张页面中放入一张全屏自适应的图片. 3.修复 ...

  6. CF 439C(251C题)Devu and Partitioning of the Array

    Devu and Partitioning of the Array time limit per test 1 second memory limit per test 256 megabytes ...

  7. sim800c GPRS模块的透传模式

    一.透传模式 基于sim800c GPRS模块在建立TCP/IP连接情况下,可以设置进入透传模式,用来接收和发送数据,一旦进入即从串口收到的数据将被打包,然后发送.接收同理. 注意在透传模式下所有的A ...

  8. 【Mysql】将Excel表导入至Mysql的当中一张表

    如果表格有A(整型字段).B(整型字段).C(字符串数据)三列数据,希望导入到Mysql中数据库中表格table.table中须要插入的字段各自是col1,col2,col3 1.在随意一列,如果在D ...

  9. [Express] Upload Files with Express

    In this lesson we create a new Express web server app for handling file uploads and persisting them ...

  10. TCP/IP图解学习总结(二)

    注意:这里的第n层是依照OSI协议来的 I   网桥--2层交换机.数据链路层面上链接两个网络的设备.它可以识别数据链路层中的数据帧. II  路由器-3层交换机.网络层面上连接两个网络,并对分组报文 ...