鱼C论坛

 找回密码
 立即注册
查看: 1362|回复: 5

[已解决]数组列表分片疑问

[复制链接]
发表于 2022-5-14 17:15:57 | 显示全部楼层 |阅读模式

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

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

x
list1 = [3, 2, 1]
list2 = list1
list1 =[6,5,4]
print(list2)
list1.sort()
print(list2)
print(list1)
[3, 2, 1]
[3, 2, 1]
[4, 5, 6]

这里为什么list2 = list1    并且 list1 已经重新指定为 6 5 4后第一次输出是 3 2 1 但是在sort后 list2再次输出还是 3 2 1?? 不是应该跟随list1变为4 5 6?
最佳答案
2022-5-14 17:28:11
jcpython2 发表于 2022-5-14 17:20
这一段我预期是第一次输出321 第二次输出456 ,但两次都输出321



这里可以这样理解:

list1 和 list2  都是一个标签,此时将 list1 标签贴在了列表 [3. 2. 1] 上,即这段代码:
list1 = [3, 2, 1]

然后我们将 list2 标签贴在 list1 标签所在的列表上 [3, 2, 1],即代码:
list2 = list1

这个时候我们打印 list2 ,输出结果毋庸置疑:[3, 2, 1]

接下来继续看下面的代码:

此时 list 2 和 list1 标签都贴在 [3, 2, 1] 列表上,将 list1 的标签重新贴在另一个列表 list2 上:
list1 = [ 4,5,6]

最后再次打印 list2,因为 list2 还是贴在 [3, 2, 1] 这个列表上所以还是打印该列表,最终两次打印的结果都为 [3, 2, 1]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-14 17:20:10 | 显示全部楼层
list1 = [3, 2, 1]
list2 = list1
print(list2)
list1 = [ 4,5,6]
print(list2)
[3, 2, 1]
[3, 2, 1]


这一段我预期是第一次输出321 第二次输出456 ,但两次都输出321
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-14 17:28:11 | 显示全部楼层    本楼为最佳答案   
jcpython2 发表于 2022-5-14 17:20
这一段我预期是第一次输出321 第二次输出456 ,但两次都输出321



这里可以这样理解:

list1 和 list2  都是一个标签,此时将 list1 标签贴在了列表 [3. 2. 1] 上,即这段代码:
list1 = [3, 2, 1]

然后我们将 list2 标签贴在 list1 标签所在的列表上 [3, 2, 1],即代码:
list2 = list1

这个时候我们打印 list2 ,输出结果毋庸置疑:[3, 2, 1]

接下来继续看下面的代码:

此时 list 2 和 list1 标签都贴在 [3, 2, 1] 列表上,将 list1 的标签重新贴在另一个列表 list2 上:
list1 = [ 4,5,6]

最后再次打印 list2,因为 list2 还是贴在 [3, 2, 1] 这个列表上所以还是打印该列表,最终两次打印的结果都为 [3, 2, 1]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-14 17:30:36 | 显示全部楼层
Twilight6 发表于 2022-5-14 17:28
这里可以这样理解:

list1 和 list2  都是一个标签,此时将 list1 标签贴在了列表 [3. 2. 1] 上, ...



前面的 sort() 是对 list1 进行排序,自然不影响 list2 ,因为 list2 还是指向列表 [3, 2, 1]

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-14 23:57:34 | 显示全部楼层
Twilight6 发表于 2022-5-14 17:28
这里可以这样理解:

list1 和 list2  都是一个标签,此时将 list1 标签贴在了列表 [3. 2. 1] 上, ...

list2 = list1 后是list2贴上[3,2,1]身上,而不是list1身上,并且[3,2,1]是独立的,当list1或list2用sort排序后,数组[3,2,1]就变动,让list1 list2 输出结果也变动

如果要把list2的数值独立出来,就用 list2 = list1[:]对吧

我本来错的地方在于 以为list2 贴在list1身上,应该是list1 list2都贴在[3,2,1]才对


这样理解没错了吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-15 09:32:50 | 显示全部楼层
jcpython2 发表于 2022-5-14 23:57
list2 = list1 后是list2贴上[3,2,1]身上,而不是list1身上,并且[3,2,1]是独立的,当list1或list2用sort ...



是的

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 08:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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