Python问题?
x=[[1]]*3print(x)x[0][0]=5print(x)为什么改变一个数值,其余的则会跟着改变?是不是相当于把1拷贝了2个,放上去?那两个相当于1的反映?...
x = [[1]] * 3
print(x)
x[0][0]=5
print(x)
为什么改变一个数值,其余的则会跟着改变?是不是相当于把1拷贝了2个,放上去?那两个相当于1的反映? 展开
print(x)
x[0][0]=5
print(x)
为什么改变一个数值,其余的则会跟着改变?是不是相当于把1拷贝了2个,放上去?那两个相当于1的反映? 展开
展开全部
因为[[1]]*3拷贝的是[1],拷贝的是一个列表的引用,而不是数值1。
即x=[[1]]*3执行完后,x保存了3个引用,这3个引用保存的是同一个列表对象的地址。
通过任何一个引用修改了列表对象的值后,通过其它引用访问到的列表对象也是修改后的。
因为这3个引用保存的是同一个列表对象的地址。
这就像你有许多编了号的箱子,而你在一个编号为1的箱子中放了一个苹果,然后将这个编号1写在了a、b、c3张纸上。
然后通过其中一张纸找到编号为1的箱子,换掉了这个箱子中的东西,那通过另外两张纸找到这个箱子时,里面的东西自然也是换掉了的,因为找到的是同一个箱子。
即x=[[1]]*3执行完后,x保存了3个引用,这3个引用保存的是同一个列表对象的地址。
通过任何一个引用修改了列表对象的值后,通过其它引用访问到的列表对象也是修改后的。
因为这3个引用保存的是同一个列表对象的地址。
这就像你有许多编了号的箱子,而你在一个编号为1的箱子中放了一个苹果,然后将这个编号1写在了a、b、c3张纸上。
然后通过其中一张纸找到编号为1的箱子,换掉了这个箱子中的东西,那通过另外两张纸找到这个箱子时,里面的东西自然也是换掉了的,因为找到的是同一个箱子。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询