gpt4 book ai didi

python - 停止 Python 函数覆盖输入

转载 作者:行者123 更新时间:2023-12-02 00:40:04 26 4
gpt4 key购买 nike

我有一个简单的函数,它应该沿着数组的对角线向下运行并将所有值变为 0。

def diagonal_zeros(dataset):
zero = dataset[:]
length = len(zero)
for i in range(length):
zero[i, i] = 0
return zero

当我在数组上运行此函数时,它会输出新的、正确的“零”数组,但它也会返回并覆盖原始“数据集”。我原以为 zero = dataset[:] 行会阻止这种情况。

但是,我没有使用此函数获得相同的行为:

def seperate_conditions(dataset, first, last):
dataset = dataset[first:last, :]
return dataset

第一个数据集保持不变。我一直在阅读相关问题的 StackOverflow 答案,但我终生无法弄清楚。我正在研究科学分析管道,所以我真的希望能够在每一步都引用矩阵。

谢谢

最佳答案

python 中的参数通过赋值(感谢@juanpa.arrivillaga 的更正)而不是值传递。这意味着通常函数不会收到参数的副本,而是指向参数本身的“指针”。如果您更改函数中参数引用的对象,则您正在修改外部的同一对象。 Here's a page with some more information .

一种可能性是使用 copy module在您的函数中,创建数据集的副本。

例如,对于您的代码:

import copy
myDataset = [[1,2,3],[2,3,4],[3,4,5]]

def diagonal_zeros(dataset):
zero = copy.deepcopy(dataset)
length = len(zero)
for i in range(length):
zero[i][i] = 0
return zero

result = diagonal_zeros(myDataset)
print(result) #[[0, 2, 3], [2, 0, 4], [3, 4, 0]]
print(myDataset) #[[1, 2, 3], [2, 3, 4], [3, 4, 5]]

This article这个概念对我帮助很大。

关于python - 停止 Python 函数覆盖输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47355376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com