bonnieg 发表于 2017-9-22 12:27:58

第12讲第0题不是太明白

如图,我把这个第三行改成old.reverse(),则print(new)为即和old一样。
那为什么题目中把old赋值6,打印的new就和old不一样了呢,为什么此时print(new)不等于呢
希望能有大神给我解答一下,谢谢大家了

foolwolf0068 发表于 2017-9-22 12:54:54

原因是 python 中都是对象,
源程序中 old 和new 都是指向
new = old
new 也指向
old.reverse() =
则new也就变为
那么
然而,old 重新赋值,但是new 依然是原来的对象

mass 发表于 2017-9-22 14:38:07

其实可以这样理解: 把想象成一个按顺序装着1,2,3,4,5的瓶子,old =相当于把“old”标签贴到了这个瓶子上,new=old相当于又贴了一个“new”标签到同一个瓶子上,old=相当于把old标签撕下来贴到了这个瓶子上;old=如果替换成old.reverse()相当于把贴着“old”标签的瓶子里的东西顺序倒过来了,而此时两个标签贴的还是同一个瓶子,print(new)和print(old)自然都会打印

amanionly 发表于 2017-9-22 14:59:14

2# 说的简单清晰

amanionly 发表于 2017-9-22 15:02:00

楼主你可以这么理解当第一次把old赋值给new的时候 相当于“复制”而不是“剪切”,当把复制给old的时候   new没有被再次赋值,所以还是之前的。

bonnieg 发表于 2017-9-22 15:19:53

foolwolf0068 发表于 2017-9-22 12:54
原因是 python 中都是对象,
源程序中 old 和new 都是指向
new = old


噢,明白了,太感谢了{:5_91:}

bonnieg 发表于 2017-9-22 15:20:49

mass 发表于 2017-9-22 14:38
其实可以这样理解: 把想象成一个按顺序装着1,2,3,4,5的瓶子,old =相当于把“ol ...

你讲的好清楚,我明白了,太感谢了

bonnieg 发表于 2017-9-22 15:21:24

amanionly 发表于 2017-9-22 15:02
楼主你可以这么理解当第一次把old赋值给new的时候 相当于“复制”而不是“剪切”,当把复制给 ...

恩恩,好的,谢谢你,我明白了

bonnieg 发表于 2017-9-22 15:22:12

amanionly 发表于 2017-9-22 14:59
2# 说的简单清晰

谢谢你的回答
页: [1]
查看完整版本: 第12讲第0题不是太明白