鱼C论坛

 找回密码
 立即注册
查看: 2648|回复: 9

列表问题

[复制链接]
发表于 2019-10-9 11:52:50 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x

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

为什么会打印[1,2,3,4,5]

old和new都是指向同一数据的不同标签。。old变了new也应该变啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-9 11:58:41 From FishC Mobile | 显示全部楼层
old怎吗變了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-9 12:02:22 From FishC Mobile | 显示全部楼层
old给新值了啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-9 12:03:12 From FishC Mobile | 显示全部楼层
打印old  是  []6[]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-9 15:12:38 | 显示全部楼层
  1. >>> old = [1, 2, 3, 4, 5] # 标签 old 被贴在列表 [1, 2, 3, 4, 5] 上
  2. >>> new = old             # 标签 new 也被贴在列表 [1, 2, 3, 4, 5] 上
  3. >>> old = [6]             # 标签 old 被改贴到列表 [6] 上
  4. >>> print(new)            # 标签 new 仍然被贴在列表 [1, 2, 3, 4, 5] 上
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-9 15:13:49 | 显示全部楼层
对old的赋值操作是会改变id的
也就是说old指向了新的东西

old = [1,2,3,4,5]
>>> new = old
>>> id(new)
4488349672
>>> id(old)
4488349672
>>> old = [6]
>>> id(old)
4488362464
>>> id(new)
4488349672

就好比 本来old和new都是贴在一个装有[1, 2, 3, 4, 5]的瓶子上
old = [6]就相当于把这个标签撕下来贴在一个装有[6]的瓶子上了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-9 18:41:06 | 显示全部楼层
old 给了一个新值,这时 new 和 old 完全没有关系,自然就不会跟着变化了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-12 17:58:52 | 显示全部楼层
你对 old 使用列表的方法进行修改才会改变 new 的值,用赋值的方法只不过是将它所指向的位置改变而已。
打个比方说:一开始你有两把钥匙,都是开 A 柜子门的。用对象自带的方法改变值,就相当于用钥匙把门打开改动 A 柜子里面东西;而直接赋值就相当于,把其中一个钥匙回炉重造改成 B 柜子门的钥匙,再去改 B 柜子里的东西,此时再用另一把钥匙看 A 柜子里的东西,当然就没有任何变化啦。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-15 22:27:49 | 显示全部楼层
你这是重新赋值,id是会变的:
  1. Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32
  2. Type "help", "copyright", "credits" or "license()" for more information.
  3. >>> old = [1, 2, 3, 4, 5]
  4. >>> new = old
  5. >>> id(old)
  6. 54668184
  7. >>> id(new)
  8. 54668184
  9. >>> old = [6]
  10. >>> id(old)
  11. 61375752
  12. >>> id(new)
  13. 54668184
  14. >>>
复制代码

如果你不想让id变,就不要重新赋值:
  1. Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32
  2. Type "help", "copyright", "credits" or "license()" for more information.
  3. >>> old = [1, 2, 3, 4, 5]
  4. >>> new = old
  5. >>> old.clear()
  6. >>> old.append(6)
  7. >>> new
  8. [6]
  9. >>> old
  10. [6]
  11. >>> id(old)
  12. 56437696
  13. >>> id(new)
  14. 56437696
  15. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-15 22:58:30 | 显示全部楼层
如果你 append item 到 old 中,new 就会变了
  1. old = [1,2,3,4,5]
  2. new = old

  3. print('old : {0}'.format(old))
  4. print('new : {0}'.format(new))

  5. old.append(6)

  6. print('old : {0}'.format(old))
  7. print('new : {0}'.format(new))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-19 20:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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