2016-02-16 18 views
1

所以我不知道这是否是一个格式良好的问题,如果不是,我很抱歉,但我很难过。此外,我不知道如何提交一个最简单的工作示例,因为如果没有整个代码,这对stackexchange有点大,我不能重现行为。python对象更改输入变量的值

所以,这里的问题:我有一个对象,它需要一个numpy数组作为它的参数之一。 (如果有帮助的话,这个数组代表了微分方程的初始条件,我的对象中的一个方法可以用数值方式求解)。使用这个数组求解微分方程后,它输出答案就好了,但是原来的变量存储数组现在已经改变了值。这里是我发生的事情:

import numpy as np 
import mycode as mc 

input_arr = np.ndarray(some_shape) 
foo = mc.MyClass(input_arr) 
foo.numerical_solve() 
some_output 

精细和丹迪。但是,当我检查input_arr时,它改变了价值。有时它与some_output(也就是说,数值解决方案的最终值)相同,但有时它是一些插页式步骤。

正如我所说,我完全难住,任何意见将不胜感激!

+1

您需要显示你的类和'numerical_solve'的代码。推测'numerical_solve'正在突变数组(例如,通过设置数值)。 – BrenBarn

+3

没有理由为什么'MyClass'或'numeric_solve'不能改变'input_arr'的位置,这很常见。有时,例如,这将用于节省时间和/或空间;例如,numpy的中缀操作符(例如,x + = 1)比创建数组的重复副本更快。如果你想保存原件,你可以制作一份副本,但是*先验*更改并不表示问题。 – tom10

+1

为什么不使用副本? –

回答

0

如果你有一个可变对象(listsetnumpy.array,......),你不希望它发生突变,那么你需要做一个拷贝,并传递代替:

l1 = [1, 2, 3] 
l2 = l1[:] 

s1 = set([1, 2, 3]) 
s2 = s1.copy() 

arr1 = np.ndarray(some_shape) 
arr2 = np.copy(arr1)