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]
的引用。
任意改变任意列上的值,那一列都会改变,因为他们都是同一个引用
3 回答3.1k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
4 回答1.8k 阅读
3 回答1.7k 阅读
1 回答1.4k 阅读✓ 已解决
这个是因为列表在python中是引用类型,具体可以参考 http://www.cnblogs.com/btchenguang/archive/2012/01/30/2332479.html