具有相同参数的函数的不同输出

时间:2020-03-06 18:40:34

标签: python

为什么我的函数'increment'对于其他函数创建的矩阵返回不同的值,而对于手动矩阵却返回不同的值?

n = 2
m = 3
indices = [[0,1],[1,1]]

def matrixpopulation(n,m):
    row=[]
    matrix=[]
    row+=(0  for _ in range(0,m))            
    matrix+=(row for _ in range(0,n))
    return matrix

def increment(indices,matrixa):
    for v,k in indices:
        for i in range(3):
            matrixa[v][i]+=1
        for i in range(2):  
            matrixa[i][k]+=1
    return matrixa

matrixa=matrixpopulation(n,m)
filled_matrix=increment(indices,matrixa)

print(matrixpopulation(n,m))
print(filled_matrix)

manualmatrix=[[0,0,0],[0,0,0]]
print(manualmatrix)
print(increment(indices,manualmatrix))

1 个答案:

答案 0 :(得分:1)

matrix+=(row for _ in range(0,n))

在此处创建矩阵时,实际上是将引用添加到相同的row n次。当您修改一个“行”中的某个元素时,所有其他行也将被修改。例如:

a = [1, 2]
b = [a, a]
a[0] = 3

立即检查b