大家好,欢迎来到IT知识分享网。
更多教程请私信~
来源:思路实验室
作者:室长
大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。
我们学习了这么多期,相信大家也对Python有了一些了解。但其实有些概念介绍得比较简单,这是为了快速地建立起对概念的认识,快速地能上手使用。当有了认识,能够使用后,我们还应该回过头来仔细看一看这个概念认识得准不准确。
在我们之前的介绍中,变量是由变量名和变量值组成的,这种关系非常像是字典的键值对一样,一一对应。同时不同的变量名可以对应同样的值,而同样的变量名不能对应不同的值。新的变量值会覆盖掉旧的值。
这样理解在很多情况下是没问题的,但有时候就不灵了,我们举个例子:
这时候可以想见,打印的结果是1,对吧!
如果我们在b=a后把a的值赋为2,那b的值会是多少?
b=a实际上是把a的值赋给了b,而不是把变量名赋给了b。现在我们只给a重新赋了值,所以b是不受影响的:
这个思路看起来没有什么问题。如果我们换成列表呢?
看起来也挺正常的。那如果我们使用一下列表方法呢?
怎么一下子就不一样了?明明是往a列表里添加元素,为什么b列表也跟着加了?说好的不受影响呢!
这就涉及变量的本质问题了,也就是说,变量到底是什么,它是怎么产生的,又连接了什么东西?
我们之前说过,在Python中,万物皆对象。整数是对象,列表也是对象。所以变量名指向的是对象。在刚才给a和b赋值为整数时,a就指向了整数对象1,而b=a则是让b指向了a所指向的对象,同样是1。后边我们将a重新指向整数对象2,但没有让b的指向发生变化,所以b的值仍然是1。
为什么不是将a指向的整数对象的值改为2?因为整数对象是不可修改的。“不可修改”的概念我们在学习字符串时给大家介绍过,另外我们应该还记得元祖也是不可修改的。
而到了列表就不一样了,我们先让a指向一个包含一个元素1的列表对象,再让b指向a指向的列表(即[1])。而当这个列表被添加了一个元素2的时候,对于每个指向它的变量,打印出来都是[1,2]。
那为什么给a重新赋值为[2],b不受影响呢?因为[2]本身是另一个列表了,给a赋值为[2]就让a指向了另一个对象,之前的[1]就和a say goodbye了。
事实上,变量是怎么赋值的呢?这个过程有点像工厂招人分配宿舍:
不管是什么类型的数据,都是储存在于内存中的。内存之于数据,就像宿舍之于住户。工地宿舍,从来都是现用人现招人,招来之后分好宿舍再去分配岗位。工人被分配的宿舍号,被称为内存地址。分配完了,工头就安排了,这个宿舍的人去干啥,那个宿舍的人去干啥。后来为了省事,直接在宿舍门上贴上分配好的岗位,而这个岗位名,就被称为变量。
所以Python中的变量,实际上是变量名与内存地址之间的对应关系。
理解了这些,我们终于知道为什么对a使用列表方法会影响到b。
室长在刚开始学习Python的时候没少在这个问题上吃过亏,命名就想要复制一个列表,结果在别的过程中被改来改去。那么如果我单纯想获得一个列表的复制,该怎么去操作呢?请关注下期:在Python里搞克隆|浅拷贝与深拷贝
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/143189.html