python-3.x - 函数工作后全局列表也发生变化
问题描述
为什么在传递返回矩阵后,如果我将副本传递给函数,则会更改全局数组?我试过 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
请告诉我怎么了
解决方案
使用该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
推荐阅读
- java - 为什么我的反向 LinkedList 方法不能多次工作?
- python - Python:嵌套循环映射字段一一
- python - 如何迭代地搜索结构?
- blockchain - 挖矿节点如何获得相同的目标?
- istio - 如何为 Istio Egress 配置 SNI 直通
- javascript - 将 Python 后端与桌面应用程序的 HTML/CSS/JS 用户界面集成?
- r - 基于列条件从数据框中大量删除行
- asp.net-mvc - EF6 从数据库更新 Code First 模型
- azure-keyvault - 在 Databricks 中删除 Azure Keyvault 支持的范围
- java - 如何检索放入 DefaultListModel 的对象类型?