鱼C论坛

 找回密码
 立即注册
查看: 2453|回复: 4

[已解决]提问,有道题不懂

[复制链接]
发表于 2020-2-23 10:42:32 | 显示全部楼层 |阅读模式

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

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

x
>>> old = [1,2,3,4,5]
>>> new = old
>>> old = [6]
>>> print(new)
[1, 2, 3, 4, 5]



小甲鱼的教程里面讲到一个类似指针的概念,为什么这里new没有变成6
最佳答案
2020-2-23 10:46:17
  1. >>> old = [1,2,3,4,5]  # old 指向列表 [1,2,3,4,5]
  2. >>> new = old          # new 与 old 一起指向列表 [1,2,3,4,5]
  3. >>> old = [6]          # old 指向新的列表 [6],从而与 new 分道扬镳;
  4. >>> print(new)         # new 依然指向列表 [1,2,3,4,5]
  5. [1, 2, 3, 4, 5]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-23 10:46:17 | 显示全部楼层    本楼为最佳答案   
  1. >>> old = [1,2,3,4,5]  # old 指向列表 [1,2,3,4,5]
  2. >>> new = old          # new 与 old 一起指向列表 [1,2,3,4,5]
  3. >>> old = [6]          # old 指向新的列表 [6],从而与 new 分道扬镳;
  4. >>> print(new)         # new 依然指向列表 [1,2,3,4,5]
  5. [1, 2, 3, 4, 5]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 10:46:38 | 显示全部楼层
>>> old = [1,2,3,4,5]   #old指向 [1,2,3,4,5] 的地址
>>> new = old  #new指向 [1,2,3,4,5] 的地址
>>> old = [6] #old改为指向 [6] 的地址
>>> print(new)  #new的指向并没有改变
[1, 2, 3, 4, 5]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 11:05:21 | 显示全部楼层
因为 old 重新指向了一个列表,new 和 old 就没有关系了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-23 12:05:18 | 显示全部楼层
在原来的列表上进行 append()、extends() 操作才是改变同一地址的列表的值,
  1. old = [1, 2, 3]
  2. print(id(old))
  3. old.append(4)
  4. print(id(old))
复制代码

虽然列表的值改变了,但是它的地址没有变,所以才说列表是可变类型。

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

这种虽然 old 与 new 的值一样,但是 new 已经是重新分配过地址的了,只是 old 和 new 两个地址指向的值是一样的而已。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 19:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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