鱼C论坛

 找回密码
 立即注册
查看: 704|回复: 2

求助

[复制链接]
发表于 2021-7-28 13:37:33 | 显示全部楼层 |阅读模式

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

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

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


输出:[1, 3, 4, 5, 8]
          [1, 3, 4, 5, 8]

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


输出:[8]
[1, 3, 8, 4, 5]


为什么用sort方法,new跟着old改变,直接赋值new就不变了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-28 13:51:48 | 显示全部楼层
变量名更像是一个标签贴在数据上

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


此时的old和new都指向同一个列表,list.sort()函数是对列表自身进行改变

old和new依旧指向这个列表,不是new跟着old改变,而是new和old都随着他们指向的数据改变

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


在这段代码中,old和new先是都指向同一个列表
而后old去指向了别的列表old=[8]
此时new和old指向不同的列表,不再有任何关系了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-7-28 14:20:49 | 显示全部楼层
  1. old = [1, 3, 8, 4, 5]
  2. new = old
  3. print(id(new))
  4. print(id(old))
  5. old.sort()
  6. print(id(new))
  7. print(id(old))
  8. old = [8]
  9. print(id(new))
  10. print(id(old))
  11. print(old)
  12. print(new)
复制代码

old = [1, 3, 8, 4, 5]
创建一个列表,old指向该列表
new = old 使得 new 也指向同一个列表
列表是可变对象,old.sort()使得该列表内进行排序,但列表本身不变
相当于有一个盒子,old.sort()相当于将盒子里杂乱的东西摆好了,可盒子还是那个盒子,你往盒子里面加东西还是拿东西出来,盒子始终在那,没变
而old 和 new 都指向该盒子(列表),所以old和new是一样的,相当于两个标签,都贴在这个盒子上,old和new都代表该盒子
而old = [8]这个语句,则使得old 这个标签从原来的盒子拿走贴到了另一个盒子上了
所以old 和 new代表的就是不同的盒子了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 22:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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