鱼C论坛

 找回密码
 立即注册
查看: 1034|回复: 8

[已解决]关于赋值

[复制链接]
发表于 2020-4-26 00:48:04 | 显示全部楼层 |阅读模式

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

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

x
>>>myteacher = '小甲鱼'
>>>yourteacher = myteacher
>>>yourteacher = '黑夜'
>>>print(myteacher)

>>> myteacher = '小甲鱼'
>>> yourteacher = myteacher
>>> myteacher = '黑夜'
>>> print(yourteacher)

说说我的理解,看是不是这样。第一个我以为是小甲鱼黑夜,但是输出之后是小甲鱼,后面我看了下。小甲鱼黑夜要用+将2个字符串拼接才能打出来。但是第一个为什么我print(yourteacher)出错了,yourteacher也赋值了啊,第二个同理。显示难道是根据对变量名的第一次赋值来计算吗?



最佳答案
2020-4-26 00:59:45
本帖最后由 Twilight6 于 2020-4-26 01:07 编辑

出错不应该,应该是你不小心把变量名打错了

赋值 都是右边的赋值给左边,左边是变量,右边是所需要赋的值

赋值的时候,会把原有的值给覆盖

python中每个变量都会有自己的编号id,相同id的源头相同  那么只要源头一变,所有与此源头有关的变量全部与之改变  与中间参与的参数无关(可以用id(变量名)来查看是不是同一id)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-26 00:59:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-4-26 01:07 编辑

出错不应该,应该是你不小心把变量名打错了

赋值 都是右边的赋值给左边,左边是变量,右边是所需要赋的值

赋值的时候,会把原有的值给覆盖

python中每个变量都会有自己的编号id,相同id的源头相同  那么只要源头一变,所有与此源头有关的变量全部与之改变  与中间参与的参数无关(可以用id(变量名)来查看是不是同一id)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 01:03:02 | 显示全部楼层
myteacher = '小甲鱼'
yourteacher = myteacher        #yourteacher == '小甲鱼'
yourteacher = '黑夜'
print(myteacher)        #打印myteacher,显示'小甲鱼'

myteacher = '小甲鱼'
yourteacher = myteacher        #yourteacher == '小甲鱼'        #理解为yourteacher指向了'小甲鱼',不应该理解为yourteacher指向了myteacher,实际yourteacher不随myteacher改变而改变
myteacher = '黑夜'        #yourteacher == '小甲鱼'                #理解为myteacher指向了'黑夜',不影响yourteacher指向了'小甲鱼'
print(yourteacher)        #打印yourteacher,显示'黑夜'

#如果想打印小甲鱼黑夜
myteacher = '小甲鱼'
yourteacher = '黑夜'
print(myteacher + yourteacher)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 08:45:11 | 显示全部楼层
先回答你的问题。
第一个你print(yourteacher)出错应该是你拼写出错了。正常情况下print(yourteacher)应该输出'黑夜'
第二个print(yourteacher)输出应该是'小甲鱼',print(myteacher)输出应该是'黑夜'

python的变量名实际上是标签,给变量名赋值实际上是向变量贴标签
执行完前两句之后,两个便桥都贴在'小甲鱼'上了。在给yourteacher或者myteacher赋值实际上是将标签撕下来贴到另一个变量上去,这样不改变原来的变量,也不改变其他标签

看一下这个图,是我之前做的。我懒得再重新做了,能表达这个意思,只是两个变量不一样。。
214242e6qj09w5h5qqrqc5.jpg

另外关于变量赋值与标签,可以看一下我之前的帖子:python细节之2、变量名与标签 变量的赋值与修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 22:31:31 | 显示全部楼层
Twilight6 发表于 2020-4-26 00:59
出错不应该,应该是你不小心把变量名打错了

赋值 都是右边的赋值给左边,左边是变量,右边是所需要赋的 ...

第一个就是第三条把黑夜的值赋值给了yourteacher  然后第二个yourteacher=myteacher就被覆盖了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 22:36:01 | 显示全部楼层

但是第二个print(yourteacher)答案是小甲鱼啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 22:39:58 | 显示全部楼层
sunrise085 发表于 2020-4-26 08:45
先回答你的问题。
第一个你print(yourteacher)出错应该是你拼写出错了。正常情况下print(yourteacher)应该 ...

第一个我是复制的代码 打出来是小甲鱼  我理解就是最好print(myteacher)只对应第一条赋值,因为只有第一条是把小甲鱼赋值给了myteacher

但是这样理解第二个应该是输出黑夜啊 但是答案是小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 23:13:13 | 显示全部楼层
小王学Python 发表于 2020-4-26 22:31
第一个就是第三条把黑夜的值赋值给了yourteacher  然后第二个yourteacher=myteacher就被覆盖了吗

第一个对了

python中每个变量都会有自己的编号id,相同id的源头相同  那么只要源头一变,所有与此源头有关的变量全部与之改变  与中间参与的参数无关(可以用id(变量名)来查看是不是同一id)

第二个你认真看下这句,实际上这里的myteacher你可以看成是yourteacher的中间变量,直接看源头是 = ‘小甲鱼’,所以yourteacher = 小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 23:23:57 | 显示全部楼层
小王学Python 发表于 2020-4-26 22:39
第一个我是复制的代码 打出来是小甲鱼  我理解就是最好print(myteacher)只对应第一条赋值,因为只有第一 ...

请认真看一下我在四楼的回答。
"小甲鱼"和"黑夜"实际上不应该称之为变量,而是字符串常量,myteacher和yourteacher是两个标签,所谓的赋值,都是贴标签,重新赋值就是将标签从一个字符串上撕下来贴到另一个字符串上去而已。没有覆盖不覆盖的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 23:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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