赋值与列表切片,还有列表的操作符(如sort)对新赋值的变量如何区分,小白恍恍惚惚了
如图,第一条中 ls2 = ls1的时候,只要ls1不是由sort之类的函数改变,那么ls2就不会跟着ls1改变对吗?
那么假如第一条中我不进行ls1 = 的重新赋值,而是用别的函数改变ls1那么打印出来的ls2是会跟随ls1一起改变吗?
这种情况有没有什么易懂的解释方法,我好像把自己弄糊涂了
{:10_277:} 本帖最后由 青出于蓝 于 2020-5-25 14:46 编辑
ls1改变ls2不会改变
ls2是在ls1改变前赋值的
除非,ls1每发生一次改变,ls2就重新赋值。这样,ls1改变了,ls2也会改变 本帖最后由 Twilight6 于 2020-5-25 14:50 编辑
第一个例子的 ls1 和 ls2 都是 列表 的别名
ls1 和 ls2 真正的源头都是指向这个列表的~
sort(),reverse(),clean()等是在源头上的列表上进行改变的 ,所以只要别名都是指向这个列表的都会一起改变
ls1 = 是重新赋值,等于是把 ls1的这个别名重新给了 这个列表
就把之前列表拥有的这个别名换给了另一个列表 所以 ls1 指向的是 这个列表ls2 指向的还是 这个列表
你也可以把别名 改叫外号吧,这样也比较好理解,列表就是当作个人,而外号只能指其中一个人,而不能同时指向多个人
3L正解 直接赋值的话使用列表方法会关联,直接赋值为另一个则不会
就像一个列表,你把ls1和ls2两个标签贴到了这个列表上
对列表进行修改时会同时改变两个标签对应的列表
而把ls1直接赋值为另一个列表就像把ls1标签撕下来,贴到上
如果帮到你,给个最佳吧~{:10_287:} Twilight6 发表于 2020-5-25 14:45
第一个例子的 ls1 和 ls2 都是 列表 的别名
ls1 和 ls2 真正的源头都是指向这个列表的~
sort ...
那第二条例子呢
ls1 =
ls3 = ls1.sort()
#那这个时候ls1改变了吗? 还是说是对ls3进行了ls1顺序的赋值,ls3是 ls1还是原来的乱序吗?
ls2 = ls1
#此时为ls2赋值的ls1究竟是顺序的还是乱序的
ls1 =
#这里是最后赋值的,我能理解
# 但是最后打印出来的ls3为什么是NONE那第二条里面执行sort操作的是变量吗?为ls1重新赋值为不是我在最后一条才输入,为什么能改变之前的表达式
{:10_266:}语言组织差,希望能看明白我的问题,现在脑如浆糊{:10_257:}
Aber 发表于 2020-5-25 14:52
那第二条例子呢
ls1 =
ls3 = ls1.sort()
sort(),reverse(),clean()等是在源头上的列表上进行改变的所以没有返回值,导致你打印ls3 会打印出None Aber 发表于 2020-5-25 14:52
那第二条例子呢
ls1 =
ls3 = ls1.sort()
#那这个时候ls1改变了吗? 还是说是对ls3进行了ls1顺序的赋值,ls3是 ls1还是原来的乱序吗?看上一楼,ls3 是 None以为 这些在源头上进行改变的没有返回值
#此时为ls2赋值的ls1究竟是顺序的还是乱序的
是顺序的,因为这里 ls3 = ls1.sort() 再源头上已经重新排序了
# 但是最后打印出来的ls3为什么是NONE那第二条里面执行sort操作的是变量吗?为ls1重新赋值为不是我在最后一条才输入,为什么能改变之前的表达式
看7楼 Twilight6 发表于 2020-5-25 14:45
第一个例子的 ls1 和 ls2 都是 列表 的别名
ls1 和 ls2 真正的源头都是指向这个列表的~
sort ...
用外号做理解的话好像明白了,谢谢 Aber 发表于 2020-5-25 14:52
那第二条例子呢
ls1 =
ls3 = ls1.sort()
哦哦,打扰了,网速慢 Twilight6 发表于 2020-5-25 14:57
看上一楼,ls3 是 None以为 这些在源头上进行改变的没有返回值
是顺序的,因为这里 ls3 = ls1.sort( ...
还得麻烦一下{:10_250:} Aber 发表于 2020-5-25 15:11
还得麻烦一下
哦哦 刚刚没看见
ls2 和 ls1 都指向 列表
然后你第二行 ls3 = ls1.sort() 是对列表重新排序了就是对 重新排序
源头改变 所有同别名的变量都改变 Twilight6 发表于 2020-5-25 15:22
哦哦 刚刚没看见
ls2 和 ls1 都指向 列表
然后你第二行 ls3 = ls1.sort() 是对列表重新排 ...
o(>ω<)o{:10_334:}
那写傻瓜一点 这段应该是这样的吧
ls1 =
ls3 = ls1.sort()#这里已经对ls1进行排序了呗所以这时候ls1 = ls3 =
ls2 = # 所以ls2 = ls1 其实就是对ls2贴了排序后列表的标签呗?
ls1 = #这里其实连第一条也改变了呗,所以也等于ls3 = 。sort()?
比较笨这样理解的话没有偏差了吧~{:10_260:} Aber 发表于 2020-5-25 15:33
o(>ω
ls3 = ls1.sort()#这里已经对ls1进行排序了呗所以这时候ls1 = ls3 =
这里错啦~你记住对列表本身发生改变的是没有返回值的 ls3 = None
ls1 = #这里其实连第一条也改变了呗,所以也等于ls3 = 。sort()?
ls3 还是 None因为 ls1.sort() 并没有返回任何值给 ls3 Aber 发表于 2020-5-25 15:33
o(>ω
开始都这样,我去看我以前发的帖都感觉有点傻乎乎的嘿嘿 Twilight6 发表于 2020-5-25 15:36
开始都这样,我去看我以前发的帖都感觉有点傻乎乎的嘿嘿
学到了,哈哈,以后还得多麻烦了 Aber 发表于 2020-5-25 15:42
学到了,哈哈,以后还得多麻烦了
客气~
页:
[1]