鱼C论坛

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

[已解决]Python课后作业12第0题

[复制链接]
发表于 2018-1-12 15:27:26 | 显示全部楼层 |阅读模式

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

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

x
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)
会打印[1,2,3,4,5]
                               
                        第三行如果改成old.sort(),new列表就会变成和old.sort()显示的一样,而将old重新赋值,打印就
                不会发生变化,如果按照课后作业11第五题理解的,new不是应该属于墙头草,发生改变吗
最佳答案
2018-1-12 15:33:51
首先列表属于可变变量,即局部修改后其对应的地址仍在原处,所以:
>>> old = [1, 2, 3, 4, 5] #old指向地址1
>>> new = old #new也指向地址1
>>> old = [6] #old不是局部修改,而是整体重新赋值,这是指向地址2
>>> print(new) #new还指向地址1
你可以用id()来对比一下重新赋值和append, sort等操作或局部赋值old[0] = 10的地址变化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-12 15:33:51 | 显示全部楼层    本楼为最佳答案   
首先列表属于可变变量,即局部修改后其对应的地址仍在原处,所以:
>>> old = [1, 2, 3, 4, 5] #old指向地址1
>>> new = old #new也指向地址1
>>> old = [6] #old不是局部修改,而是整体重新赋值,这是指向地址2
>>> print(new) #new还指向地址1
你可以用id()来对比一下重新赋值和append, sort等操作或局部赋值old[0] = 10的地址变化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-12 15:45:27 | 显示全部楼层
冬雪雪冬 发表于 2018-1-12 15:33
首先列表属于可变变量,即局部修改后其对应的地址仍在原处,所以:
>>> old = [1, 2, 3, 4, 5] #old指向地 ...

嗯嗯,这下彻底理解了,多谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-12 15:48:26 | 显示全部楼层
小菜饼 发表于 2018-1-12 15:45
嗯嗯,这下彻底理解了,多谢!

再问一个问题,局部修改只是指列表内的元素位置发生变化吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-12 15:52:47 | 显示全部楼层
冬雪雪冬 发表于 2018-1-12 15:33
首先列表属于可变变量,即局部修改后其对应的地址仍在原处,所以:
>>> old = [1, 2, 3, 4, 5] #old指向地 ...

再问一个问题,局部修改只是指列表内的元素位置发生变化吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-12 15:57:30 | 显示全部楼层
这样给你解释吧!old被你重新赋值了,已经不是那个列表了!就好比你跟你老婆买了一套房子,署名写了你们俩人的,你想叫这房子old,但是你老婆给这房子取名字叫new,不管怎么样都还是这一个房子,但是你自己又买了一套新房子,署名只有你自己,你也叫这房子old,所以这两个old位置是不一样的,!同理你重新赋值了一个新变量!下面old已经不是上面的old了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-1-12 16:00:13 | 显示全部楼层
小菜饼 发表于 2018-1-12 15:52
再问一个问题,局部修改只是指列表内的元素位置发生变化吗

局部修改,也可以删除啊,替换啊,翻转排序都行呀,局部修改就是要用列表内置函数修改,改的是列表里面的内容,而不是重新定义新列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-12 16:00:58 | 显示全部楼层
大麦miracle 发表于 2018-1-12 15:57
这样给你解释吧!old被你重新赋值了,已经不是那个列表了!就好比你跟你老婆买了一套房子,署名写了你们俩 ...

哇,这个厉害了,寓教于乐,虽然我已经懂了,但你的这个例子会让我更加印象深刻,多谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-12 16:03:38 | 显示全部楼层
小菜饼 发表于 2018-1-12 16:00
哇,这个厉害了,寓教于乐,虽然我已经懂了,但你的这个例子会让我更加印象深刻,多谢!

我也是新手一起加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-12 16:04:09 | 显示全部楼层
大麦miracle 发表于 2018-1-12 16:00
局部修改,也可以删除啊,替换啊,翻转排序都行呀,局部修改就是要用列表内置函数修改,改的是列表里面的 ...

嗯嗯,懂了,膜拜大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-12 16:07:17 | 显示全部楼层
小菜饼 发表于 2018-1-12 15:52
再问一个问题,局部修改只是指列表内的元素位置发生变化吗

不止位置变化,如append增加元素,或对某个元素重新赋值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-12 16:11:08 | 显示全部楼层
冬雪雪冬 发表于 2018-1-12 16:07
不止位置变化,如append增加元素,或对某个元素重新赋值。

嗯嗯,只要是用列表内置的方法修改都可以说是局部修改,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 15:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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