首页 > 解决方案 > 函数工作后全局列表也发生变化

问题描述

为什么在传递返回矩阵后,如果我将副本传递给函数,则会更改全局数组?我试过 create_matrix(A[:], B, 0); create_matrix(A.copy(), B, 0); 但是在这些情况下,数组 A 仍然会发生变化,尽管我没有将结果分配给这样的函数 A = create_matrix(A[:], B, 0)。我认为,函数的结果应该只是去print()

这是我的代码:

def create_matrix(matrix, matrix_B, num):
    for i in range(3):
        matrix[i][num] = matrix_B[i]  # example: matrix[0][0] = matrix_B[0]
    return matrix

A = [
    [4, -2, 1],
    [8, -1, 1],
    [1, 3, -1],
]
B = [
    -4,
    -2,
    6,
]

print(create_matrix(A[:], B, 0))
print(A)

输出:

[[-4, -2, 1], [-2, -1, 1], [6, 3, -1]]  # After function
[[-4, -2, 1], [-2, -1, 1], [6, 3, -1]]  # A

在这里,我想用 B 中的值替换 A 中第一列的值: 4 -> -4; 8 -> -2;1 -> 6

我想要这个输出:

[[-4, -2, 1], [-2, -1, 1], [6, 3, -1]]  # After function
[[4, -2, 1], [8, -1, 1], [1, 3, -1]]  # A

请告诉我怎么了

标签: python-3.xlist

解决方案


使用该numpy包,您可以获得输入矩阵的副本现在如果您更改复制矩阵的值,则输入矩阵的值不会改变。

import numpy as np
def create_matrix(matrix_A, matrix_B, num):
  matrix = np.copy(matrix_A)
  for i in range(3):
    matrix[i][num] = matrix_B[i]                 
  return matrix

推荐阅读