如何在 Python 中将矩阵作为参数传递而不更改其原始值 [duplicate]

How to pass a matrix as an argument without changing its original values in Python [duplicate]

提问人:Saurabh Damle 提问时间:10/4/2022 最后编辑:wovanoSaurabh Damle 更新时间:10/4/2022 访问量:168

问:

我正在尝试将矩阵(列表列表)作为参数传递给函数。我想保持原始矩阵值不变。如何在 python 中实现它?我试图在新的变量温度中复制矩阵,但它仍然不起作用。

ideal = [[5,1,2,3,4],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]]
print(ideal)
for i in range(1):
    temp = ideal
    print(rotate_col_down(temp,i))
print(ideal)

输出:

[[5, 1, 2, 3, 4], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 23, 23, 24, 25]] #ideal
[[21, 1, 2, 3, 4], [5, 7, 8, 9, 10], [6, 12, 13, 14, 15], [11, 17, 18, 19, 20], [16, 23, 23, 24, 25]]
[[21, 1, 2, 3, 4], [5, 7, 8, 9, 10], [6, 12, 13, 14, 15], [11, 17, 18, 19, 20], [16, 23, 23, 24, 25]] # changed ideal

这是我尝试实现的功能

def rotate_col_down(state, j):
    temp = state[ROWS-1][j]
    for i in range(ROWS-1,0,-1):
        state[i][j]= state[i-1][j]
    state[0][j] = temp
    return(state)
Python 按值传递

评论


答:

2赞 LinFelix 10/4/2022 #1

你遇到了这样一个事实,即 python 主要是通过引用而不是值传递(将这篇文章与答案进行比较)。

您可以在代码中使用 or (compare how-to-deep-copy-a-list.copy()copy.deepcopy())

所以一个解决方案是

import copy

ideal = [[5,1,2,3,4],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]]

print(ideal)
for i in range(1):
    print(rotate_col_down(copy.deepcopy(ideal),i))
print(ideal)

评论

2赞 wovano 10/4/2022
很好的答案,但如果之前已经回答过问题,最好将问题标记为重复,而不是提供新答案。