python - Python 中的二维数组是否存在别名?

标签 python arrays matrix pointer-aliasing

我知道列表别名是 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/

相关文章:

c - 将矩阵传递给 C 中的方法

python - 如何为列表中的每个项目添加一个 boolean 值?

python - 使用 Python Pillow 的镜头模糊效果

python - 这个 numpy 数组排列在 TensorFlow 中的等价物是什么?

javascript - for 循环仅打印数组中的最后一项

arrays - R中的向量矩阵

python - 广告词 API : retrieve daily spend (costs)

arrays - 使用 Repa 并行数组的惯用期权定价和风险

php - 如何将数据库中的信息添加到现有的对象数组中?

opengl - OpenTK 矩阵变换