鱼C论坛

 找回密码
 立即注册
查看: 1249|回复: 16

[已解决]赋值与列表切片,还有列表的操作符(如sort)对新赋值的变量如何区分,小白恍恍惚惚了

[复制链接]
发表于 2020-5-25 14:41:44 | 显示全部楼层 |阅读模式

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

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

x
微信截图_20200525143621.png

如图,第一条中 ls2 = ls1的时候,只要ls1不是由sort之类的函数改变,那么ls2就不会跟着ls1改变对吗?
        那么假如第一条中我不进行ls1 = [6]的重新赋值,而是用别的函数改变ls1  那么打印出来的ls2是会跟随ls1一起改变吗?
这种情况有没有什么易懂的解释方法,我好像把自己弄糊涂了
最佳答案
2020-5-25 14:45:44
本帖最后由 Twilight6 于 2020-5-25 14:50 编辑

第一个例子的 ls1 和 ls2 都是 列表 [1,2,3,4,5] 的别名
ls1 和 ls2 真正的源头都是指向这个列表的~
sort(),reverse(),clean()等是在源头上的列表上进行改变的 ,所以只要别名都是指向这个列表的都会一起改变

ls1 = [6] 是重新赋值,等于是把 ls1的这个别名重新给了 [6] 这个列表
就把之前列表拥有的这个别名换给了另一个列表 所以 ls1 指向的是[6] 这个列表  ls2 指向的还是[1,2,3,4,5] 这个列表

你也可以把别名 改叫外号吧,这样也比较好理解,列表就是当作个人,而外号只能指其中一个人,而不能同时指向多个人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 14:44:04 | 显示全部楼层
本帖最后由 青出于蓝 于 2020-5-25 14:46 编辑

ls1改变ls2不会改变
ls2是在ls1改变前赋值的

除非,ls1每发生一次改变,ls2就重新赋值。这样,ls1改变了,ls2也会改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 14:45:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-5-25 14:50 编辑

第一个例子的 ls1 和 ls2 都是 列表 [1,2,3,4,5] 的别名
ls1 和 ls2 真正的源头都是指向这个列表的~
sort(),reverse(),clean()等是在源头上的列表上进行改变的 ,所以只要别名都是指向这个列表的都会一起改变

ls1 = [6] 是重新赋值,等于是把 ls1的这个别名重新给了 [6] 这个列表
就把之前列表拥有的这个别名换给了另一个列表 所以 ls1 指向的是[6] 这个列表  ls2 指向的还是[1,2,3,4,5] 这个列表

你也可以把别名 改叫外号吧,这样也比较好理解,列表就是当作个人,而外号只能指其中一个人,而不能同时指向多个人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-25 14:46:56 | 显示全部楼层
3L正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 14:47:05 | 显示全部楼层
直接赋值的话使用列表方法会关联,直接赋值为另一个则不会
就像一个列表[1,2,3,4,5],你把ls1和ls2两个标签贴到了这个列表上
对列表进行修改时会同时改变两个标签对应的列表
而把ls1直接赋值为另一个列表就像把ls1标签撕下来,贴到[6]上


如果帮到你,给个最佳吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 14:52:23 | 显示全部楼层
Twilight6 发表于 2020-5-25 14:45
第一个例子的 ls1 和 ls2 都是 列表 [1,2,3,4,5] 的别名
ls1 和 ls2 真正的源头都是指向这个列表的~
sort ...

那第二条例子呢
ls1 = [1,5,2,4,3]
ls3 = ls1.sort()
#那这个时候ls1改变了吗? 还是说是对ls3进行了ls1顺序的赋值,ls3是[1,2,3,4,5] ls1还是原来的乱序吗?
ls2 = ls1
#此时为ls2赋值的ls1究竟是顺序的还是乱序的
ls1 = [6]
#这里是最后赋值的,我能理解
# 但是最后打印出来的ls3为什么是NONE  那第二条里面执行sort操作的是变量[6]吗?为ls1重新赋值为[6]不是我在最后一条才输入,为什么能改变之前的表达式

语言组织差,希望能看明白我的问题,现在脑如浆糊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 14:53:27 | 显示全部楼层
Aber 发表于 2020-5-25 14:52
那第二条例子呢
ls1 = [1,5,2,4,3]
ls3 = ls1.sort()

sort(),reverse(),clean()等是在源头上的列表上进行改变的  所以没有返回值,导致你打印ls3 会打印出None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 14:57:04 | 显示全部楼层
Aber 发表于 2020-5-25 14:52
那第二条例子呢
ls1 = [1,5,2,4,3]
ls3 = ls1.sort()
#那这个时候ls1改变了吗? 还是说是对ls3进行了ls1顺序的赋值,ls3是[1,2,3,4,5] ls1还是原来的乱序吗?
看上一楼,ls3 是 None  以为 这些在源头上进行改变的没有返回值
#此时为ls2赋值的ls1究竟是顺序的还是乱序的

是顺序的,因为这里 ls3 = ls1.sort() 再源头上已经重新排序了
# 但是最后打印出来的ls3为什么是NONE  那第二条里面执行sort操作的是变量[6]吗?为ls1重新赋值为[6]不是我在最后一条才输入,为什么能改变之前的表达式

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

使用道具 举报

 楼主| 发表于 2020-5-25 14:57:19 | 显示全部楼层
Twilight6 发表于 2020-5-25 14:45
第一个例子的 ls1 和 ls2 都是 列表 [1,2,3,4,5] 的别名
ls1 和 ls2 真正的源头都是指向这个列表的~
sort ...

用外号做理解的话好像明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 14:59:20 | 显示全部楼层
Aber 发表于 2020-5-25 14:52
那第二条例子呢
ls1 = [1,5,2,4,3]
ls3 = ls1.sort()


哦哦,打扰了,网速慢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 15:11:22 | 显示全部楼层
Twilight6 发表于 2020-5-25 14:57
看上一楼,ls3 是 None  以为 这些在源头上进行改变的没有返回值

是顺序的,因为这里 ls3 = ls1.sort( ...

111.png

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

使用道具 举报

发表于 2020-5-25 15:22:54 | 显示全部楼层

哦哦 刚刚没看见
ls2 和 ls1 都指向 列表 [1,5,2,4,3]
然后你第二行 ls3 = ls1.sort() 是对列表重新排序了  就是对 [1,5,2,4,3] 重新排序
源头改变 所有同别名的变量都改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 15:33:02 | 显示全部楼层
Twilight6 发表于 2020-5-25 15:22
哦哦 刚刚没看见
ls2 和 ls1 都指向 列表 [1,5,2,4,3]
然后你第二行 ls3 = ls1.sort() 是对列表重新排 ...

o(>ω<)o
那写傻瓜一点 这段应该是这样的吧
ls1 = [1,5,2,4,3]
ls3 = ls1.sort()  #这里已经对ls1进行排序了呗  所以这时候ls1 = ls3 =[1,2,3,4,5]
ls2 = [1,2,3,4,5]# 所以ls2 = ls1 其实就是对ls2贴了排序后列表的标签呗?
ls1 = [6] #这里其实连第一条也改变了呗,所以也等于ls3 = [6]。sort()?

比较笨  这样理解的话没有偏差了吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 15:35:23 | 显示全部楼层
ls3 = ls1.sort()  #这里已经对ls1进行排序了呗  所以这时候ls1 = ls3 =[1,2,3,4,5]
这里错啦~  你记住对列表本身发生改变的是没有返回值的 ls3 = None

ls1 = [6] #这里其实连第一条也改变了呗,所以也等于ls3 = [6]。sort()?

ls3 还是 None  因为 ls1.sort() 并没有返回任何值给 ls3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 15:36:02 | 显示全部楼层

开始都这样,我去看我以前发的帖都感觉有点傻乎乎的嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 15:42:31 | 显示全部楼层
Twilight6 发表于 2020-5-25 15:36
开始都这样,我去看我以前发的帖都感觉有点傻乎乎的嘿嘿

学到了,哈哈,以后还得多麻烦了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 15:42:55 | 显示全部楼层
Aber 发表于 2020-5-25 15:42
学到了,哈哈,以后还得多麻烦了

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 00:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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