鱼C论坛

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

[已解决]一个关于列表标签的问题

[复制链接]
发表于 2018-10-20 09:31:03 | 显示全部楼层 |阅读模式

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

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

x
  1. # 例1
  2. old = [1, 2, 3, 4, 5]
  3. new = old   # new = [1, 2, 3, 4, 5]
  4. old = [6]   # old = [6], new = [1, 2, 3, 4, 5]
  5. # 这里old和new两个标签同时指向列表[1,2,3,4,5],old被修改为[6]
  6. print(new)  # [1, 2, 3, 4, 5]。为什么new还是[1, 2, 3, 4, 5]没有被改变?

  7. # 例2
  8. list1 = [1, 3, 2, 9, 7, 8]
  9. list3 = list1  # list3 = [1, 3, 2, 9, 7, 8]
  10. list1.sort()   # list1 = [1, 2, 3, 7, 8, 9], list3 = [1, 2, 3, 7, 8, 9]
  11. # 这里一开始list1和list3两个标签同时指向列表[1, 3, 2, 9, 7, 8],
  12. # list1被排序为[1, 2, 3, 7, 8, 9]
  13. # 为什么list3跟着list1变了?
  14. # 这里的“将list1变为list1.sort()”和上例中“将old变为[6]”有什么区别?
  15. print(list3)
复制代码
感谢!
最佳答案
2018-10-20 09:37:24
python 的赋值是帖标签,例 1 ,new = old,那么它们指向同一笔数据,然后 old = [6] ,old 指向新的数据
例 2,list3 = list1,然后透过 list1 排序 list1.sort(),没有赋值号,所以跟着改变啦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-20 09:35:18 | 显示全部楼层
第一个old开始和new指向一个地址,但是old重新赋值了,注意是列表赋值,将old指向新地址

第二个sort不是赋值,他们指向一个地址,
所以跟着变
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-20 09:37:24 | 显示全部楼层    本楼为最佳答案   
python 的赋值是帖标签,例 1 ,new = old,那么它们指向同一笔数据,然后 old = [6] ,old 指向新的数据
例 2,list3 = list1,然后透过 list1 排序 list1.sort(),没有赋值号,所以跟着改变啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-20 09:58:32 | 显示全部楼层
2楼大神是正解,我也回顾下:
                       第一个是重新给old赋值为新的列表,会改变地址,列表索引切片赋值就不会改变内存地址
                       第二个是列表.sort()方法,只是改变原列表顺序,并不会改变内存地址,list1和list3指向同一地址
                       用函数 id()可以显示当前变量的内存地址
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-20 23:19:25 | 显示全部楼层
快速收敛 发表于 2018-10-20 09:58
2楼大神是正解,我也回顾下:
                       第一个是重新给old赋值为新的列表,会改变地址,列 ...

学到了 一起进步!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-11 04:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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