鱼C论坛

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

我想请问一下课后作业中一个赋值问题

[复制链接]
发表于 2021-9-4 21:47:04 | 显示全部楼层 |阅读模式

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

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

x
在第十课的课后作业中有一道
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
>>> print(new)
为什么这里print(new)为 [1, 2, 3, 4, 5]  而不是[6]

然后在第十一课作业中
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list2 = list1[:]
>>> list2
[1, 3, 2, 9, 7, 8]
>>> list3 = list1
>>> list3
[1, 3, 2, 9, 7, 8]
>>> list1.sort()
>>> list1
[1, 2, 3, 7, 8, 9]
>>> list3
[1, 2, 3, 7, 8, 9]

在这里list1改变  list3就随之改变   为什么在old赋值给了new 然后old改变了 print(new)没有改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-4 22:04:57 | 显示全部楼层
这个就等同余深拷贝和浅拷贝一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-4 22:12:49 | 显示全部楼层
从这来看,”=“ 应该是像 C语言的指针一样,指向的是地址空间,而不是单纯的赋值,new = old 之后,new 和 old 指向同一片存储空间,但是又进行了 old = [6] 这一操作,改变了 old 的空间,但是没有改变 new 的空间,所以 new 还是 [1,2,3,4,5]
同理,下边的因为都是指向 list1 的空间,也就是 [1,3,2,9,7,8] 的空间,所以排序了之后就都改变了,也不是都改变了,就像苏联成了俄罗斯,苏联人也都成了俄罗斯人

应该是这么理解,对 python 不是很懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-4 23:06:51 | 显示全部楼层
old = [6] 不行 old被修改了
按你的想法得写成 old[:] = [6] 才可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-5 00:37:23 | 显示全部楼层
首先,python 会开辟一片内存来储存列表 [1, 2, 3, 4, 5]
然后创建一个变量 old 来指向这个列表
new = old 就是把 new 给指向该列表
这个时候你得清楚,new 和 old 两个变量本身没啥关系,只是因为它们指向同一个列表,才因此关联起来
所以这个时候你通过 old 去改变列表,那因为 new 也指向这个列表,所以 new 的值也会变,现在关系如下:
QQ截图20210905003337.png


但是如果你用赋值操作 old = [6]
那么相当于把 old 重新指向了新的列表,但是 new 还是指向原来的列表,所以现在关系变成了下图:
QQ截图20210905003504.png

所以 old 和 new 之间就再也没有了任何关系,再无瓜葛。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-5 21:28:38 | 显示全部楼层
理解了,
old是被重新赋值了新的列表  所以和new赋值的列表没有关系
list1和list3指向同一个列表,所以当通过bif改变list1的列表时,list3也的列表也被随之改变
>>> list1 = [1,2,3,4,5]
>>> list3 = list1
>>> list1.append(6)
>>> list1
[1, 2, 3, 4, 5, 6]
>>> list3
[1, 2, 3, 4, 5, 6]
>>>
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-4 15:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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