我知道列表别名是 Python 中的一个问题,但我想不出解决它的方法。
def zeros(A):
new_mat = A
for i in range(len(A)):
for j in range(len(A[i])):
if A[i][j]==0:
for b in range(len(A)):
new_mat[b][j] = 0
else:
new_mat[i][j] = A[i][j]
return A
即使我根本没有改变 A 的值,当我返回 A 时,它仍然被修改:
>>> Matrix = [[1,2,3],[5,0,78],[7,3,45]]
>>> zeros(Matrix)
[[1, 0, 3], [5, 0, 78], [7, 0, 45]]
这个列表有别名吗?如果是这样,您如何在不发生混叠的情况下修改二维数组的元素?非常感谢 <3.
最佳答案
new_mat = A
不会创建新矩阵。您只是为您也知道为 A
的对象指定了一个新名称。如果它是数字列表的列表,您可能需要使用 copy.deepcopy创建一个完整的副本,如果它是一个 numpy 数组,你可以使用 copy方法。
关于python - Python 中的二维数组是否存在别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28269256/