鱼C论坛

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

[已解决]python第012讲的课后作业求助

[复制链接]
发表于 2018-6-28 22:30:29 | 显示全部楼层 |阅读模式

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

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

x
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)
为什么会显示[1,2,3,4,5]而不是[6]呢?

而且查看new和old的id也不一样,第011讲中不是说list3=list1,查看list3和list1的id确实是一样的,这是怎么回事呢,求大神指点
最佳答案
2018-6-28 22:41:00
old = [1, 2, 3, 4, 5]
new = old
old.append(6)
print(new)
你这样看,new 和 old 就指向同一list了
old = [6]相当于在内存里开辟了一块新的内存,让old指向它,所以new 和 old指的就是不是同一个list了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-28 22:41:00 | 显示全部楼层    本楼为最佳答案   
old = [1, 2, 3, 4, 5]
new = old
old.append(6)
print(new)
你这样看,new 和 old 就指向同一list了
old = [6]相当于在内存里开辟了一块新的内存,让old指向它,所以new 和 old指的就是不是同一个list了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2018-6-29 00:00:55 | 显示全部楼层
new = old 后如果不进行赋值操作的话,注意赋值二字,你可以对这两个append,remove都可以,这两个依然指向同一个内存地址,但是一旦有赋值操作,不管是对new赋值,还是old赋值,那么new就非原来的new,old非原来的old了,虽然名字相同,但也仅此而已。你上面是给old赋了新值,那么原来的old已不可引用,python的垃圾回收机制将其回收了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-29 06:51:35 | 显示全部楼层
火垂るの墓 发表于 2018-6-28 22:41
old = [1, 2, 3, 4, 5]
new = old
old.append(6)

谢谢热心解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-4 10:26:05 | 显示全部楼层
谢谢解答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-4 16:57:06 | 显示全部楼层
凌九霄 发表于 2018-6-29 00:00
new = old 后如果不进行赋值操作的话,注意赋值二字,你可以对这两个append,remove都可以,这两个依然指向 ...

谢谢解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-20 20:31:13 | 显示全部楼层
火垂るの墓 发表于 2018-6-28 22:41
old = [1, 2, 3, 4, 5]
new = old
old.append(6)

原来是这样,谢谢答主~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 20:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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