鱼C论坛

 找回密码
 立即注册
查看: 1555|回复: 11

[已解决]python零基础入门课后作业第12讲第0题

[复制链接]
发表于 2018-4-13 21:53:42 | 显示全部楼层 |阅读模式

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

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

x
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)
打印结果为[1,2,3,4,5]

我记得小甲鱼说过通过new = old赋值后 只是给old加上一个标签 new会随着old的值改变而改变 只有通过[:]切片赋值才是得到一个新的拷贝
所以old = [6] new的值不是应该随着old的变化而变化吗?
请各位大佬为我解答 感激不尽!
最佳答案
2018-4-13 23:00:07
我理解是old,new都是名字,指向列表[1, 2, 3, 4, 5],如果你改变列表[1, 2, 3, 4, 5],那么old 和new都会跟着变。如果你把old的名字给了新列表[6],那么老列表[1, 2, 3, 4, 5]只有一个名字new。
满意的话请给个我评最佳答案,我也是小白,等鱼币下锅~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-13 22:23:56 | 显示全部楼层
陈欣思 发表于 2018-4-13 22:17
:curse::loveliness::loveliness:

啥?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 23:00:07 | 显示全部楼层    本楼为最佳答案   
我理解是old,new都是名字,指向列表[1, 2, 3, 4, 5],如果你改变列表[1, 2, 3, 4, 5],那么old 和new都会跟着变。如果你把old的名字给了新列表[6],那么老列表[1, 2, 3, 4, 5]只有一个名字new。
满意的话请给个我评最佳答案,我也是小白,等鱼币下锅~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-14 02:12:38 | 显示全部楼层
4楼正解啊,不管是old还是new,它都只是一个变量名称而已,都是在指向某个对象之后才有意义。[1,2,3,4,5]是一个list对象,[6]是另一个list对象。
step1:你把变量a指向[1,2,3,4,5]
step2:你把变量b指向[1,2,3,4,5]
step3:你把变量a指向[6]

这个时候变量b还是指向[1,2,3,4,5]的啊,改变的只是变量a的“指向”。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-14 08:23:33 From FishC Mobile | 显示全部楼层
Python中所有变量名都是一个标签,你将old=[6],只是将这个标签指向另一个内存块,之后它和原来的已经毫无瓜葛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-14 08:37:15 | 显示全部楼层
第一步:>>> old = [1, 2, 3, 4, 5]     这是给这个列表[1, 2, 3, 4, 5]一个标签是old  
第二步:>>> new = old                   这时是给old一个标签new,同时这两个变量(old与new)想在都指向列表 [1, 2, 3, 4, 5]
第三步:>>> old = [6]                     这时old的指向发生改变,他指向6了,而new并没有仍然指向列表[1, 2, 3, 4, 5],
第四步:>>> print(new)                   所以结果是[1, 2, 3, 4, 5]
打印结果为[1,2,3,4,5]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-14 19:36:25 | 显示全部楼层
>>> old = [1,2,3,4,5]
>>> new = old
>>> id(old)
94547440
>>> id(new)
94547440
>>> old = [6]
>>> id(old)
94547760
>>> print(new)
[1, 2, 3, 4, 5]
>>> print(old)
[6]
>>> id(new)
94547440
>>>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-15 15:32:42 | 显示全部楼层
lenin_king 发表于 2018-4-13 23:00
我理解是old,new都是名字,指向列表[1, 2, 3, 4, 5],如果你改变列表[1, 2, 3, 4, 5],那么old 和new都会跟 ...

嗯 我懂了! 感谢解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-15 15:33:13 | 显示全部楼层
小庆子 发表于 2018-4-14 19:36
>>> old = [1,2,3,4,5]
>>> new = old
>>> id(old)

噢噢 old的id已经变了 而new还没有 感谢解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-15 15:34:35 | 显示全部楼层
xue11 发表于 2018-4-14 08:37
第一步:>>> old = [1, 2, 3, 4, 5]     这是给这个列表[1, 2, 3, 4, 5]一个标签是old  
第二步:>>> new  ...

感谢解答~~ 明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-15 15:35:29 | 显示全部楼层
BngThea 发表于 2018-4-14 08:23
Python中所有变量名都是一个标签,你将old=[6],只是将这个标签指向另一个内存块,之后它和原来的已经毫无 ...

简短的解析 感谢解答~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-15 16:07:13 | 显示全部楼层
修改原列表,与重新生成一个新的列表重新指向,是两个不一样的概念
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-15 16:09:09 | 显示全部楼层
BlueSand 发表于 2018-4-15 16:07
修改原列表,与重新生成一个新的列表重新指向,是两个不一样的概念

嗯 一开始还没有理解透彻 感谢解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-10 13:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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