鱼C论坛

 找回密码
 立即注册
查看: 3156|回复: 10

[已解决]关于给变量赋值的问题

[复制链接]
发表于 2022-11-8 18:19:48 | 显示全部楼层 |阅读模式

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

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

x
例1:
myteacher = '小甲鱼'
yourteacher = myteacher
yourteacher = '黑夜'
print(myteacher)
输出结果是:小甲鱼

例2:
my_foods = ['pizza','falafel','carrot cake']
friend_foods = my_foods
my_foods.append('cannoli')
friend_foods.append('ice cream')
print(my_foods)
print(friend_foods)
输出结果是:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

例1变量存储字符串,例2变量存储列表,输出结果不一样的原因是赋值的类型不一样吗?这个该怎么理解呢?
最佳答案
2022-11-8 18:28:28
本帖最后由 jackz007 于 2022-11-8 18:39 编辑
myteacher = '小甲鱼'     # myteacher 指向 '小甲鱼'
yourteacher = myteacher  # yourteacher 也指向 '小甲鱼'
yourteacher = '黑夜'     # yourteacher 指向 '黑夜'
print(myteacher)         # myteacher 依然指向 '小甲鱼'

my_foods = ['pizza','falafel','carrot cake']  # my_foods 指向 ['pizza','falafel','carrot cake']
friend_foods = my_foods                       # friend_foods 也指向 ['pizza','falafel','carrot cake']
my_foods.append('cannoli')                    # ['pizza','falafel','carrot cake'] 添加新元素 'cannoli'
friend_foods.append('ice cream')              # ['pizza','falafel','carrot cake' , 'cannoli'] 添加新元素 'ice cream'
print(my_foods)                               # ['pizza','falafel','carrot cake' , 'cannoli' , 'ice cream']
print(friend_foods)                           # ['pizza','falafel','carrot cake' , 'cannoli' , 'ice cream']
       变量名只是贴在对象上的一个标签,只是访问对象的一个途径而已,一个对象可以同时有很多个标签,就像本例,多个变量同时指向同一个对象。例2中可修改对象改变,不影响贴在对象上的标签。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-8 18:28:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-8 18:39 编辑
myteacher = '小甲鱼'     # myteacher 指向 '小甲鱼'
yourteacher = myteacher  # yourteacher 也指向 '小甲鱼'
yourteacher = '黑夜'     # yourteacher 指向 '黑夜'
print(myteacher)         # myteacher 依然指向 '小甲鱼'

my_foods = ['pizza','falafel','carrot cake']  # my_foods 指向 ['pizza','falafel','carrot cake']
friend_foods = my_foods                       # friend_foods 也指向 ['pizza','falafel','carrot cake']
my_foods.append('cannoli')                    # ['pizza','falafel','carrot cake'] 添加新元素 'cannoli'
friend_foods.append('ice cream')              # ['pizza','falafel','carrot cake' , 'cannoli'] 添加新元素 'ice cream'
print(my_foods)                               # ['pizza','falafel','carrot cake' , 'cannoli' , 'ice cream']
print(friend_foods)                           # ['pizza','falafel','carrot cake' , 'cannoli' , 'ice cream']
       变量名只是贴在对象上的一个标签,只是访问对象的一个途径而已,一个对象可以同时有很多个标签,就像本例,多个变量同时指向同一个对象。例2中可修改对象改变,不影响贴在对象上的标签。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-8 18:55:36 | 显示全部楼层
jackz007 发表于 2022-11-8 18:28
变量名只是贴在对象上的一个标签,只是访问对象的一个途径而已,一个对象可以同时有很多个标签, ...


例1  初始yourteacher和myteacher同时指向‘小甲鱼‘,之后修改yourteacher没有影响myteacher
例2  初始friend_foods和my_foods同时指向列表['pizza','falafel','carrot cake'],之后修改friend_foods影响了my_foods

修改例2:
my_foods = ['pizza','falafel','carrot cake']
friend_foods = my_foods
friend_foods[0] = 'nuddle'
print(my_foods)
print(friend_foods)
输出结果为:
['nuddle', 'falafel', 'carrot cake']
['nuddle', 'falafel', 'carrot cake']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-8 19:02:41 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-8 19:04 编辑
兜里两颗糖 发表于 2022-11-8 18:55
例1  初始yourteacher和myteacher同时指向‘小甲鱼‘,之后修改yourteacher没有影响myteacher
例2  初 ...


        在变的是对象,变量只是提供了一个访问途径
friend_foods[0] = 'nuddle'
        这里只是借用变量 friend_foods 对对象['pizza','falafel','carrot cake'] 进行了改变而已,不能理解为"修改friend_foods影响了my_foods",其实,本质上是对象变了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-8 19:06:09 | 显示全部楼层
jackz007 发表于 2022-11-8 19:02
在变的是对象,变量只是提供了一个访问途径

        这里只是借用变量 friend_foods 对对象 ...

那么在例1中第三行的yourteacher=‘黑夜’为什么就没有修改原对象的值呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-8 19:10:41 | 显示全部楼层
兜里两颗糖 发表于 2022-11-8 19:06
那么在例1中第三行的yourteacher=‘黑夜’为什么就没有修改原对象的值呢?

它其实修改了 yourteacher 的值,但是被打印的是 myteacher ,管什么 yourteacher 呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-8 19:14:15 | 显示全部楼层
嘉岳呀 发表于 2022-11-8 19:10
它其实修改了 yourteacher 的值,但是被打印的是 myteacher ,管什么 yourteacher 呀

例2里修改了friend_foods的值,打印my_foods,输出的结果受friend_foods修改影响
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-8 19:22:06 | 显示全部楼层
兜里两颗糖 发表于 2022-11-8 19:14
例2里修改了friend_foods的值,打印my_foods,输出的结果受friend_foods修改影响

上面已经说过了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-8 19:26:08 | 显示全部楼层

有点头晕哈,我再研究研究,多谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-8 19:28:08 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-8 19:33 编辑
兜里两颗糖 发表于 2022-11-8 19:06
那么在例1中第三行的yourteacher=‘黑夜’为什么就没有修改原对象的值呢?


       你的思维方式存在很大问题,非常不利于学习 Python,你必须学会以对象,而不是变量为中心来思考和解决问题。一个对象赋值给了多个变量,那就是多个变量对应了同一个对象,而绝不是每个变量对应一个自己的对象!!!
       例1中第三行的 yourteacher = '黑夜' 只是变量 yourteacher 指向了另外一个新的对象 '黑夜' ,这应该不关其他变量 myteacher 什么事吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-8 19:55:15 | 显示全部楼层
jackz007 发表于 2022-11-8 19:28
你的思维方式存在很大问题,非常不利于学习 Python,你必须学会以对象,而不是变量为中心来思考 ...

多谢大佬!刚才冷静了一下重新捋了一遍您给我的回复,我找到问题所在了!
在例2里面我把
friend_foods[0] = ‘nuddle’   和   friend_foods =['nuddle','falafel','carrot cake']混为一个意思了,所以导致了认知错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 12:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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