x=[[1]]*3,执行语句x[0][0]=5之后,为什么x的值为[[5],[5],[5]]
x=[[1]]*3
结果为 [[1], [1], [1]]
三个列表元素项都是引用的一个 [1],也就是后面两个不是具体的值,而是对第一个元素的引用!这个和直接定义 x = [[1],[1],[1]] 是不一样的.
所以x[0][0]是改变了第一个元素的值,后边两个是对第一个的引用,所以值也变成了5.
你可以打印一下id看一下是不是一样的
x = [[1]] * 3
print(x[0])
print(x[1])
print(x[2])
print(id(x[0]))
print(id(x[1]))
print(id(x[2]))
x[0][0] = 5
print(x)
x = [[1],[1],[1]]
print(x[0])
print(x[1])
print(x[2])
print(id(x[0]))
print(id(x[1]))
print(id(x[2]))
x[0][0] = 5
print(x)
应为list属于引用类型的,所以x[0][0],x[1][0],x[2][0]这三个指向的是同一个地址的值,你改变一个,其他的都改变!
参考:https://www.cnblogs.com/gametesting/p/7159398.html