对python赋值的一点小小理解

操作方法

  • 01

    众所周知,Python的赋值和一般的高级语言的赋值有很大的不同,它是引用赋值。看下面的代码1: >>>a = 5 >>>b = 8 >>>  a = b    #结果如下图1: 图1 开始的时候a指向的是5,b指向的是8,当a = b的时候,b把自己指向的地址(也就是8的内存地址)赋给了a,那么最后的结果就是a和b同时指向了8。我们可以用Python内建的函数id()来测试 那好,现在我们来看下一种情况: >>>a = [1,2,3] >>>id(a )               #可以得到1217620 >>>a.append(4)    #这时候a = [1,2,3,4], >>>id(a)                #结果还是1217620,证明如果是添加对象,不改变变量的内存地址,这个是我们下面要探讨的问题的先决条件。 >>>b = a               # b = [1,2,3,4] >>>a.append(5)    #a = b = [1,2,3,4,5] 如果没有上面的结论,[1,2,3,4]的地址和[1,2,3]的地址不一样,那么最终的结果是 a = [1,2,3,4,5], b = [1,2,3,4] 那怎么才能够让a变成[1,2,3,4],而b仍然是[1,2,3]呢? 这个时候我们需要用到copy,也就是拷贝,python内置了copy模块。看代码2 >>>import copy >>>a = [1,2,3] >>>b = copy.copy(a)   #这个时候a = b = [1,2,3] >>>a.append(4)          # a = [1,2,3,4],b = [1,2,3] 事情到这里好像就结束了,但是问题又来啦,看下面的代码3 >>>import copy >>>a = [1,2,[3,4]] >>>b = copy.copy(a) >>>id(a)                    #12177080 >>>id(b)                    #12186888,证明a、b指向的不是同一个地址 >>>a[2].append(5)    # 这时候a = b = [1,2,[3,4,5]],怎么会这样???? >>>id(a[0])                # 100380032 >>>id(b[0])                # 100380032 二者是共享地址的 也就是说这个copy.copy复制的不彻底,只复制了对象,对象的属性却是共享的。那我们有别的方法没?答案是肯定的,看下面的代码4 >>>import copy >>>a = [1,2,[3,4]] >>>b = copy.deepcopy(a) >>>id(a)                      #12177080 >>>id(b)                      #12177000 >>>a[2].append(5)     #这时候 a = [1,2,[3,4,5]],而 b = [1,2,[3,4]] >>>id(a[2][1])             #10379996 >>>id(b[2][1])             #10379996     这两个还是一样的,大惑不解,这是为什么?求达人解惑 经过linvo同学的指点,现在明白了为什么是这样。下面画个图: 如果只是浅拷贝(copy.copy),那么虚线部分是不会赋值给b的,只是把 [3,4]这个列表整体赋值。所以结果如代码3所示 而如果是深拷贝(copy.deepcopy),那么会把列表[3,4]的具体成员也赋给b,这也解释了代码4的疑惑 未完待续。。。。。。。。。。。。。。。。。

(0)

相关推荐

  • 《神雕传》逍遥派内测的一点小小心得

    <神雕传>逍遥派内测的一点小小心得. 操作方法 01 首先,逍遥是一个类似法师的职业,远程输出高,被战士近身就报废的那种,练级PK都可以.但是根据不同的情况,需要加的技能类型也不同. 先说 ...

  • python快速教程之变量命名规范

    python的变量很好理解,它是有(字母,数字,下划线组成的)变量你可以理解为代表或者引用某值的名字.如果这个让你很能理解的话你可以理解为别人给你起的绰号!假如你叫xxx那么你的好朋友给你起了另外一个 ...

  • 使用 Python 开始你的机器学习之旅

    机器学习是你的简历中必需的一门技能.我们简要概括一下使用 Python 来进行机器学习的一些步骤. 你想知道如何开始机器学习吗?在这篇文章中,我将简要概括一下使用 Python 来开始机器学习的一些步 ...

  • Win7解决无法显示缩略图的技巧

    早在微软正式推出Windows7操作系统之前,就凭借丰富的全新特性及酷炫的展示效果赢得了众多用户的青睐。对于其中的“实时任务栏缩略图预览”功能,微软还是很够意思的,基本上各个Windows7版本中都支 ...

  • LCD对比度的含义和重要性

    随着LCD一轮又一轮的降价,随着LCD技术的日益成熟,越来越多的消费者开始考虑选购LCD显示器作为电脑的标准配置。可是在眼花缭乱的LCD产品中,您真的可以完全读懂那些指标背后的意思么?您真的完全相信这 ...

  • WPS 2012有惊喜 有遗憾

    其中最大的惊喜莫过于时尚的Ribbon界面啦。当然,还有大家一直称道的“八爪鱼”、“素材库”等。有很多相关资料,不再赘述。由于本人表格用的较多,仅谈谈使用ET时的一点小小遗憾,或者说是期待! 一、填充 ...

  • 码率是什么意思

    码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。 通俗一点的理解就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件,也就是说画面的细节就越丰富 ...

  • 软件弹窗背后的秘密

    大家在日常使用电脑的过程中,是不是时而会接收到一些软件的自发式的弹窗,要么是推送新闻消息的,要不就是推销广告的。总之表面上看,这已经是比较习以为常的事情了,很多人可能会认为笔者在这里大惊小怪!其实大家 ...

  • Win8 QQ再一次强势回归!新功能新体验

    6月1日,微软发布了全新Windows 8 RP版(发行预览版),众多人性化改进吸引了全球目光。但有网友发现,虽然RP版已经原生支持简体中文,可应用商店中却少了一个国人最不可缺少的软件——腾讯QQ(M ...