2016-02-16 14 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)