鱼C论坛

 找回密码
 立即注册
查看: 1225|回复: 9

[已解决]关于第11讲课后题答案

[复制链接]
发表于 2018-3-6 21:05:40 | 显示全部楼层 |阅读模式

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

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

x
第11讲中提到Python的变量就是一个名字
如:a = [1,2,3,4]
      b = a   
这种程序是在为一个固定的东西指定另外一个名字
那为什么我对于列表的时候
a = [1,2,3,4]
b = a
a.append(5)
a
a = [1,2,3,4,5]
b
b = [1,2,3,4,5]
这种说法成立,但是当变量赋值在字符串、整型、浮点型的时候如:
a = 4
b = a
a = a-1
a
3
b
4
这里b就没有随着a改变而改变,也就是这种说法就不成立了呢?
最佳答案
2018-3-6 21:43:03
变量名问题:
python中变量名只是标签而已,可以多个标签指向同一块内存
new=old
意味着new和old这两个标签指向了同一块内存
所以你对new和old指向的数据进行改动,比如列表的pop,sort,reverse等操作都会对两者同时产生作用,因为他们修改了内存中的数据
而你将old重新赋值,意味着old标签指向另外一块内存,从此old和new再无瓜葛
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-6 21:12:52 | 显示全部楼层
因为 list 是可变类型, int,float,str 是不可变类型。
a = a-1 实际上是让a指向了 3,但 b 指向的还是 4。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-6 21:16:02 | 显示全部楼层
没事用id(a),id(b)看看就知道了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-6 21:28:30 | 显示全部楼层
我们可以这么理解
a=4
b=a
此时b和a同时指向数值4的地址
然后当
a=a-1的时候
a的地址变成了4-1所在的地址
而,4这个地址还被b记着,所以b还是指向4而a已经指向(4-1)了
而list的append操作,并没有改变a和b所指向的地址,而是对地址本身进行操作而已,所以a和b所指向的是同个地方
举个例子
a=[1,2,3]
b=[4,5,6]
c=a
c.append(4)
那么a就会是[1,2,3,4]
c也会是[1,2,3,4]
如果a=a+b
那么a就会变成[1,2,3,4,4,5,6]
而c还是[1,2,3,4]

说了这么多,这些都是我的个人见解,可能有点乱,希望你能理解清楚,哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-6 21:43:03 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
变量名问题:
python中变量名只是标签而已,可以多个标签指向同一块内存
new=old
意味着new和old这两个标签指向了同一块内存
所以你对new和old指向的数据进行改动,比如列表的pop,sort,reverse等操作都会对两者同时产生作用,因为他们修改了内存中的数据
而你将old重新赋值,意味着old标签指向另外一块内存,从此old和new再无瓜葛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-6 22:14:00 | 显示全部楼层
2012277033 发表于 2018-3-6 21:28
我们可以这么理解
a=4
b=a

谢谢 你的解答 我基本看明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-6 22:15:34 | 显示全部楼层
BngThea 发表于 2018-3-6 21:43
变量名问题:
python中变量名只是标签而已,可以多个标签指向同一块内存
new=old

谢谢你的解答,我现在明白了,但是现在还有个问题,是不是运算操作符像:+、-会改变内存地址,而Python中的内置函数的运算不改变变量指向的内存地址呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-6 22:16:07 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-3-6 21:12
因为 list 是可变类型, int,float,str 是不可变类型。
a = a-1 实际上是让a指向了 3,但 b 指向的还是  ...

谢谢你的回答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-6 22:16:41 | 显示全部楼层
塔利班 发表于 2018-3-6 21:16
没事用id(a),id(b)看看就知道了

嗯 谢谢你的帮忙
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 08:56:18 | 显示全部楼层
cicanary 发表于 2018-3-6 22:15
谢谢你的解答,我现在明白了,但是现在还有个问题,是不是运算操作符像:+、-会改变内存地址,而Python中 ...

运算符和内存地址毫无关系
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-8 07:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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