兜里两颗糖 发表于 2022-11-8 18:19:48

关于给变量赋值的问题

例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变量存储列表,输出结果不一样的原因是赋值的类型不一样吗?这个该怎么理解呢?

jackz007 发表于 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中可修改对象改变,不影响贴在对象上的标签。

兜里两颗糖 发表于 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 = 'nuddle'
print(my_foods)
print(friend_foods)
输出结果为:
['nuddle', 'falafel', 'carrot cake']
['nuddle', 'falafel', 'carrot cake']

jackz007 发表于 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 = 'nuddle'
      这里只是借用变量 friend_foods 对对象['pizza','falafel','carrot cake'] 进行了改变而已,不能理解为"修改friend_foods影响了my_foods",其实,本质上是对象变了。

兜里两颗糖 发表于 2022-11-8 19:06:09

jackz007 发表于 2022-11-8 19:02
在变的是对象,变量只是提供了一个访问途径

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

那么在例1中第三行的yourteacher=‘黑夜’为什么就没有修改原对象的值呢?

嘉岳呀 发表于 2022-11-8 19:10:41

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

它其实修改了 yourteacher 的值,但是被打印的是 myteacher ,管什么 yourteacher 呀

兜里两颗糖 发表于 2022-11-8 19:14:15

嘉岳呀 发表于 2022-11-8 19:10
它其实修改了 yourteacher 的值,但是被打印的是 myteacher ,管什么 yourteacher 呀

例2里修改了friend_foods的值,打印my_foods,输出的结果受friend_foods修改影响

嘉岳呀 发表于 2022-11-8 19:22:06

兜里两颗糖 发表于 2022-11-8 19:14
例2里修改了friend_foods的值,打印my_foods,输出的结果受friend_foods修改影响

上面已经说过了

兜里两颗糖 发表于 2022-11-8 19:26:08

嘉岳呀 发表于 2022-11-8 19:22
上面已经说过了

有点头晕哈,我再研究研究,多谢了

jackz007 发表于 2022-11-8 19:28:08

本帖最后由 jackz007 于 2022-11-8 19:33 编辑

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

       你的思维方式存在很大问题,非常不利于学习 Python,你必须学会以对象,而不是变量为中心来思考和解决问题。一个对象赋值给了多个变量,那就是多个变量对应了同一个对象,而绝不是每个变量对应一个自己的对象!!!
       例1中第三行的 yourteacher = '黑夜' 只是变量 yourteacher 指向了另外一个新的对象 '黑夜' ,这应该不关其他变量 myteacher 什么事吧?

兜里两颗糖 发表于 2022-11-8 19:55:15

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

多谢大佬!刚才冷静了一下重新捋了一遍您给我的回复,我找到问题所在了!
在例2里面我把
friend_foods = ‘nuddle’   和   friend_foods =['nuddle','falafel','carrot cake']混为一个意思了,所以导致了认知错误。
页: [1]
查看完整版本: 关于给变量赋值的问题