鱼C论坛

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

[已解决]python基础求助?关于列表

[复制链接]
发表于 2016-4-3 13:56:24 | 显示全部楼层 |阅读模式

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

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

x
list1 = [1, 3, 2, 9, 7, 8]

list2 = list1[:]

list3 = list1

list1.sort()后list3 会跟着改变

而为什么用 list1 = [0]
list3 不跟着list1改变?

最佳答案
2016-4-3 14:11:13
list1 指向[1, 3, 2, 9, 7, 8]的地址,执行list3=list1, list3也指向[1, 3, 2, 9, 7, 8]的地址,这时候你执行list1=[0]相当于list1指向了[0]的地址, 和list3没关系。
个人觉得list1和list3存放的不是列表值,只是列表的地址,类似于c语言中的指针
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-3 14:11:13 | 显示全部楼层    本楼为最佳答案   
list1 指向[1, 3, 2, 9, 7, 8]的地址,执行list3=list1, list3也指向[1, 3, 2, 9, 7, 8]的地址,这时候你执行list1=[0]相当于list1指向了[0]的地址, 和list3没关系。
个人觉得list1和list3存放的不是列表值,只是列表的地址,类似于c语言中的指针
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-3 16:49:46 | 显示全部楼层
hy564126834 发表于 2016-4-3 14:11
list1 指向[1, 3, 2, 9, 7, 8]的地址,执行list3=list1, list3也指向[1, 3, 2, 9, 7, 8]的地址,这时候你执 ...

那 list.sort()是将原地址也改变了,所以才会使list3也跟着改变么?十分感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-3 17:59:42 | 显示全部楼层
xyun156 发表于 2016-4-3 16:49
那 list.sort()是将原地址也改变了,所以才会使list3也跟着改变么?十分感谢

这个问题在小甲鱼视频里面和第011讲课后作业里有讲,

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-6 10:07:06 | 显示全部楼层
>>> l1=[2,3,1]
>>> l3=l1
>>> l3
[2, 3, 1]
>>> id(l1)
49425024
>>> id(l3)                   //l3=l1  这种方式   是让l3和l1都指向了同一个地址
49425024
>>> l1.sort()
>>> l1
[1, 2, 3]
>>> l3
[1, 2, 3]
>>> id(l1)        //你会发现 即使sort()之后  他们的地址也是没有变化的   那是因为列表是可变的
49425024
>>> id(l3)
49425024

再进一步验证 列表是可变的
>>> l1[0]=5      //改变了列表中的其中一个元素
>>> l1
[5, 2, 3]
>>> l3
[5, 2, 3]
>>> id(l1)
49425024             //地址依然没有变
>>> id(l3)
49425024
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-6 10:58:53 | 显示全部楼层
list1 = [0]后,list1指向了另一个地址吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-6 11:27:54 | 显示全部楼层
list的名字只是相当于一个标签,不是他的值等于什么。 list1=[0] 把list1名字指向了[0] ,而list3 还是指向的原来[1,3,5,7,9]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-7 00:43:20 | 显示全部楼层
list1和list3指向的是同一个地址
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-7 21:47:58 | 显示全部楼层
阿狸爱吃鱼 发表于 2016-4-6 10:07
>>> l1=[2,3,1]
>>> l3=l1
>>> l3

谢谢,很清楚了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-8 22:43:44 | 显示全部楼层
可以把它理解成贴标签,当list3 = list1 时,相当于给原来的列表贴上list3的标签,而list1.sort()产生新的列表然后这个列表贴上了list1的标签
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-20 13:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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