鱼C论坛

 找回密码
 立即注册
查看: 2427|回复: 5

0基础第12讲课后习题第一题疑问

[复制链接]
发表于 2016-9-12 14:12:44 | 显示全部楼层 |阅读模式
1鱼币
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)

为什么这里的new不会随old被重新赋值而改变呢?而在将list2 = list1 这个赋值时list2会随list1变化而变化?是否是因为其中的元素种类及数量都没变化所致呢?

最佳答案

查看完整内容

请注意小甲鱼一开始上课的时候就强调的事情,python中,如果给某个变量赋值,其实相当于,在内存中开辟一个空间给这个值,然后将变量名指向这个值,也就是所谓的“标签”概念。 在你这个例子中,具体表现为: [1,2,3,4,5]这个列表在内存中占了一个位置,然后把old这个变量名指向这个列表; 之后,你又将new这个标签指向了这个列表; 之后你又重新定义一个列表[6],将old这个标签指向了[6]这个列表。 此时,new还是指向之前的列 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-12 14:12:45 | 显示全部楼层
请注意小甲鱼一开始上课的时候就强调的事情,python中,如果给某个变量赋值,其实相当于,在内存中开辟一个空间给这个值,然后将变量名指向这个值,也就是所谓的“标签”概念。
在你这个例子中,具体表现为:
[1,2,3,4,5]这个列表在内存中占了一个位置,然后把old这个变量名指向这个列表;
之后,你又将new这个标签指向了这个列表;
之后你又重新定义一个列表[6],将old这个标签指向了[6]这个列表。
此时,new还是指向之前的列表[1,2,3,4,5],所以打印出来的结果不是[6]


后面你又提了列表的赋值,其实那个等式lis2=list1相当于拷贝列表,也就是有两个列表了,两个内存地址,只不过内容一样而已,标签分别为list1,list2

如果你看着有点糊涂,就把上面的那个标签的解释记住,后面关于列表的复制,小甲鱼的视频专门讲了,正好我看到那里了,嘿嘿
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-12 14:38:31 | 显示全部楼层
是因为当你把old赋值给new的时候还没有改变old的值,到了你的下一行代码也就是 old=【6】才改变了他的值,因为程序是按照从上往下的顺序进行的,所以没有改变new的值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-12 14:39:12 | 显示全部楼层
,,
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-12 15:07:35 | 显示全部楼层
a=[1,3,2]
b=a
a.sort()
a的结果[1,2,3]
b的结果[1,2,3]
此时的a,b都指向同一个地址

而,当a=[8] 重新赋值以后,a指向的将是[8]的地址,而b指向的地址仍然是之前那个[1,2,3]的地址
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-9-12 16:00:38 | 显示全部楼层

解释的也清楚  同样非常感谢你!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-22 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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