grid = [[0,]*5]*3
for i in range(3):
for j in range(5):
if (i+j+2)%2 ==1:
grid[i][j] = 1
print grid
结果成了下面这个样子,请教为何....
[[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]
grid = [[0,]*5]*3
for i in range(3):
for j in range(5):
if (i+j+2)%2 ==1:
grid[i][j] = 1
print grid
结果成了下面这个样子,请教为何....
[[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]
代码来说话
arr = [0,1,2,3]
arr = [arr]*2
arr[0][0] = 100
arr[1][3] = 200
print arr
你可以理解每行都是对原arr = [0,1,2,3]
的引用。
任意改变任意列上的值,那一列都会改变,因为他们都是同一个引用
1 回答9.5k 阅读✓ 已解决
2 回答5.1k 阅读✓ 已解决
2 回答3.5k 阅读✓ 已解决
3 回答4.4k 阅读
2 回答2.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
这个是因为列表在python中是引用类型,具体可以参考 http://www.cnblogs.com/btchenguang/archive/2012/01/30/2332479.html