I want to get transpose of matrix B without using Numpy. When I use 'append' to add a new element to the list, the one that has added before also change. How can I fix it?
from decimal import *
B = [[1,2,3,5], 
     [2,3,3,5], 
     [1,2,5,1]]
def shape(M):
    r = len(M)
    c = len(M[0])
    return r,c
def matxRound(M, decPts=4):
    for p in M:
        for index in range(len(M[0])):
            p[index] = round(p[index], decPts)
def transpose(M):
    c_trans, r_trans = shape(M)
    new_row = [0]*c_trans
    trans_M = []
    for i in range(r_trans):
        for j in range(c_trans):
            new_row[j] = M[j][i]
        print 'new_row',new_row
        print 'trans_M before append',trans_M
        trans_M.append(new_row)
        print 'trans_M after append',trans_M
    return trans_M
print transpose(B)
The output is here:
new_row [1, 2, 1]
trans_M before append []
trans_M after append [[1, 2, 1]]
new_row [2, 3, 2]
trans_M before append [[2, 3, 2]]
trans_M after append [[2, 3, 2], [2, 3, 2]]
new_row [3, 3, 5]
trans_M before append [[3, 3, 5], [3, 3, 5]]
trans_M after append [[3, 3, 5], [3, 3, 5], [3, 3, 5]]
new_row [5, 5, 1]
trans_M before append [[5, 5, 1], [5, 5, 1], [5, 5, 1]]
trans_M after append [[5, 5, 1], [5, 5, 1], [5, 5, 1], [5, 5, 1]]
[[5, 5, 1], [5, 5, 1], [5, 5, 1], [5, 5, 1]]
 
     
    