live long and prosper
首先,该题目的结果为[[5],[5],[5]].笔者在做答该题目时,写出的结果为[[5],[1],[1]],看到答案十分懵逼。这里就要注意了,这里x表达式中的星号的乘号作用要配合列表的嵌套来分析。
这里问题的根源在于理解列表的嵌套,如果借用C语言的指针概念的话,
x=[[1]]
该列表的第一层如果写作
x=[A]
A就是一个指针,指向第一层中的列表[1],一旦内部的列表元素值发生变化,整个嵌套列表都将发生变化。
再来看下乘号之后的变化:
x=[[1]]*3
该表达式的显示表达为:
x=[[1],[1],[1]]
这串代码我们通常可以理解它的表面意思,但是第一层中的三个元素并不是互相独立的,而是类似于指针一样,存在引用的关系,一旦加入:
x[0][0]=5
嵌套的引用关系将会使其中的元素值都放生改变,表面使改变第一个的值,实际上后面的值都改变了。
欢迎斧正