Crossin的编程教室

标题: 数组修改问题 [打印本页]

作者: 非谢家之宝树    时间: 2018-1-5 17:12
标题: 数组修改问题
本帖最后由 非谢家之宝树 于 2018-1-5 17:15 编辑

L1=[[1,2,3],[4,5,6],[7,8,0]]
L2=sorted(L1[::],reverse = True)
L2[2][1],L2[2][0]=L2[2][0],L2[2][1]
这组程序执行后为啥L1被改变了?想不明白啊
python3.6 IDE:vs2017
第三句执行完L1就变了。。
作者: TED    时间: 2018-1-5 20:20
20180105.PNG
个人理解,就像L2=L1,L1如果是列表的话,L2的操作会影响到L1的内容,因为L1和L2指向的是同一个列表,在这里先把L1和L2称为这个列表的'指针'。
这里sorted()的操作,只是对L1内元素进行排序,元素如果是列表的话,相当于对'指针'排序。
换句话说,L2=sorted(L1)虽然是生成了新的列表L2,对它内容修改的话相当于修改掉排序后的'指针',并不影响L1内的‘指针’。但是如果通过新排序后的'指针'修改原列表的内容,那么L1'指针'指向该列表,内容自然发生变化。

没查到确切的资料,以后有理解再来修改哈~

作者: 非谢家之宝树    时间: 2018-1-8 09:19
本帖最后由 非谢家之宝树 于 2018-1-8 10:11 编辑

哦哦,我理解这个意思了,感谢你的解答。发现用copy也不行,搜了下资料,发现二维数组要用deepcopy才行




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5