鱼C论坛

 找回密码
 立即注册
查看: 533|回复: 3

[已解决]11课的一道题

[复制链接]
发表于 2020-4-16 15:32:01 | 显示全部楼层 |阅读模式

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

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

x
  1. >>> old = [1, 2, 3, 4, 5]
  2. >>> new = old
  3. >>> old = [6]
  4. >>> print(new)
复制代码

最后的答案尽然是[1,2,3,4,5]
不是old = new = [6]吗
我哪里想错了。
最佳答案
2020-4-16 16:02:13
本帖最后由 倒戈卸甲 于 2020-4-16 16:12 编辑

你的程序逻辑:
第一行代码,创建列表[1,2,3,4,5],然后给这个列表贴了标签名old。
第二行代码,将new标签同样贴到了列表[1,2,3,4,5]上。
第三行代码,创建列表[6] ,并给其贴了标签old。
注意,这里完全没有new的戏份,所以到第四行打印new自然得到第二行的结果[1,2,3,4,5]。
作为对比,你可以考虑另外一段代码。
即你不创建新列表,而是将第三行代码改为old.reverse()。那么因为old和new都贴在列表[1,2,3,4,5]上。你通过old对[1,2,3,4,5]进行了倒置,访问new也会得到改变后的结果。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-16 15:36:15 | 显示全部楼层
这个东西就和贴标签一样,
你把old的标签撕下来,贴到6上
这时他俩就没有关系了(列表内置方法不会改变标签)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 16:02:13 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 倒戈卸甲 于 2020-4-16 16:12 编辑

你的程序逻辑:
第一行代码,创建列表[1,2,3,4,5],然后给这个列表贴了标签名old。
第二行代码,将new标签同样贴到了列表[1,2,3,4,5]上。
第三行代码,创建列表[6] ,并给其贴了标签old。
注意,这里完全没有new的戏份,所以到第四行打印new自然得到第二行的结果[1,2,3,4,5]。
作为对比,你可以考虑另外一段代码。
即你不创建新列表,而是将第三行代码改为old.reverse()。那么因为old和new都贴在列表[1,2,3,4,5]上。你通过old对[1,2,3,4,5]进行了倒置,访问new也会得到改变后的结果。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-16 16:11:08 | 显示全部楼层
形象一点就是
new = old 让你以为是new = old = [1, 2, 3, 4, 5]。实际上是new = [1, 2, 3, 4, 5],old = [1, 2, 3, 4, 5],赋值使得两个变量指向的地址相同。
然后给old赋值新的内容,old就指向新的地址了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 07:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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