代码:
matrix=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
a= [];
b=[];
for i in range(4):
for row in matrix:
b.append(row[i]);
a.append(b);
print('{0}:'.format(i+1))
print('b:{0}'.format(b));
print('a:{0}'.format(a));
print('\nresult:{0}'.format(a))
运行结果:
1:
b:[1, 5, 9]
a:[[1, 5, 9]]
2:
b:[1, 5, 9, 2, 6, 10]
a:[[1, 5, 9, 2, 6, 10], [1, 5, 9, 2, 6, 10]]
3:
b:[1, 5, 9, 2, 6, 10, 3, 7, 11]
a:[[1, 5, 9, 2, 6, 10, 3, 7, 11], [1, 5, 9, 2, 6, 10, 3, 7, 11], [1, 5, 9, 2, 6, 10, 3, 7, 11]]
4:
b:[1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12]
a:[[1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12], [1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12], [1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12], [1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12]]
result:[[1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12], [1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12], [1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12], [1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12]]
看官方tutorial时,想写个矩阵转置,这里写错了我知道(正确应该把b列表放到for循环或者直接用lambda表达式)。但是运行结果让我挺意外的是,b明显已经被a.append了,但是当后面b的值更改后,之前赋给a的b的值也跟着变。
我以为的结果是这样的[[1, 5, 9],[1, 5, 9, 2, 6, 10],[1, 5, 9, 2, 6, 10, 3, 7, 11], [1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12]]
最初以为是a.append(b)是b的引用(不知道python里有没有引用的概念。java里有),验证了一下
a=[];
b=4;
a.append(b);
b=6;
print(a)
结果:4,如果是引用,这里应该变成6才对呀。
所以想问下出现这样的结果具体是为什么?