鱼C论坛

 找回密码
 立即注册
查看: 2071|回复: 6

[已解决]求助python012讲一个关于列表的问题

[复制链接]
发表于 2020-2-27 23:18:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)
会打印:[1, 2, 3, 4, 5]

为什么print(new)打印出来的值不是[6]
new和old不是都指向同一个地址吗,old的值变为[6]了new打印出来应该也是[6]吧,这一块没有弄懂
最佳答案
2020-2-28 10:54:14
本帖最后由 jackz007 于 2020-2-28 11:01 编辑
芥末a 发表于 2020-2-28 09:26
我看小甲鱼的教学视频,如果old.sort(),改变了old的值的话,new也会随之改变,为什么这种重新赋值的情况 ...


        一个对象通过方法改变自己的操作并不能改变其身份。就是说,一个列表在使用自己的方法重新排序以后,改变的只是其外在形式 ,并不能把这个列表变成另外一个列表,就好比一个人不能因为换了一件衣服就变成另外的一个人。在 Python 中,定义变量是通过赋值来实现的,只要没有被重新赋值,那么,变量一经定义,会始终指向原来的对象。不管这个对象怎么折腾自己,这种对应关系始终都不会改变。
        在本例中,变量 old 与 new 指向同一个对象,old . sort() 改变的是 old 所指向的对象,并不是 old 本身,于是,我们就会发现,old 与 new "一起" 改变了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-27 23:25:32 | 显示全部楼层
[6]和[1, 2, 3, 4, 5]是两个列表对象
old后一个赋值操作改变了所指向的对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 00:22:29 | 显示全部楼层
>>> old = [1, 2, 3, 4, 5]   # old 指向列表 [1, 2, 3, 4, 5] 
>>> new = old               # new 与 old 一同指向列表 [1, 2, 3, 4, 5] 
>>> old = [6]               # old 指向新的列表 [6],从此,old 与 new 分道扬镳 
>>> print(new)              # new 依然指向列表 [1, 2, 3, 4, 5] 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-28 09:26:02 | 显示全部楼层

我看小甲鱼的教学视频,如果old.sort(),改变了old的值的话,new也会随之改变,为什么这种重新赋值的情况就不会改变new的值呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 10:13:02 | 显示全部楼层
内存中有两个数据:[1,2,3,4,5],和[6],执行old = [1,2,3,4,5],将old标签指向数据[1,2,3,4,5] ,执行new= old,也将new标签指向了[1,2,3,4,5],当执行 old= [6]时,将old标签指向了数据[6],而new的标签指向并没有改变,所以你打印print(new)时,打印[1,2,3,4,5],这个没有错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 10:54:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-2-28 11:01 编辑
芥末a 发表于 2020-2-28 09:26
我看小甲鱼的教学视频,如果old.sort(),改变了old的值的话,new也会随之改变,为什么这种重新赋值的情况 ...


        一个对象通过方法改变自己的操作并不能改变其身份。就是说,一个列表在使用自己的方法重新排序以后,改变的只是其外在形式 ,并不能把这个列表变成另外一个列表,就好比一个人不能因为换了一件衣服就变成另外的一个人。在 Python 中,定义变量是通过赋值来实现的,只要没有被重新赋值,那么,变量一经定义,会始终指向原来的对象。不管这个对象怎么折腾自己,这种对应关系始终都不会改变。
        在本例中,变量 old 与 new 指向同一个对象,old . sort() 改变的是 old 所指向的对象,并不是 old 本身,于是,我们就会发现,old 与 new "一起" 改变了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-28 15:13:52 | 显示全部楼层
jackz007 发表于 2020-2-28 10:54
一个对象通过方法改变自己的操作并不能改变其身份。就是说,一个列表在使用自己的方法重新排序 ...

看明白了,感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 13:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表