2012-03-14 6 views
4

Aという関数を別の関数の引数として使用するとします(B(A))。関数Aは、(SciPy)配列Cのエントリを指しています。配列CBから変更すると、アレイの値がグローバルに変更され、Aの通知も変更されます。次に例を示します。Pythonで変数を指す

def pointing_test2(inputs, fs): 
    local = inputs 
    print (local is initial) 
    print fs(0) 
    local[0] += 1.0 
    print fs(0) 

initial = sc.array([1.0]) 
func = lambda x: initial[0] 

pointing_test2(initial, func) 

------- Output ------- 
True 
1.0 
2.0 
[ 2.] 

つのアレイCはそうのように、ローカルB内コピーを作成することにより、グローバルに変更されることを避けることができます。途中では、私が達成したい

[...] 
     local = inputs.copy() 
[...] 

------- Output ------- 
False 
1.0 
1.0 
[ 1.] 

です!私はAの配列のコピーをローカルに指し示すようにしたいと思いますので、Bの中に!そのようにすれば、私の望む出力は次のようになります。

------- Output ------- 
False 
1.0 
2.0 
[ 1.] 

どうすればいいですか?

+0

実際のケースアプリケーションの背景をいくつか教えてもらえますか?あなたが表示しているコードでは、まったく正しいことがないようです。 –

+0

私はそうしてうれしいです、私は私の質問を更新しました。それがまだこの質問に適していると思っているかどうかを教えてください。そうでなければ、私が関連するフォーラムに向けることができれば素晴らしいだろう! – Ingo

+0

なぜポインティング機能が必要なのでしょうか? Indermediateベクトルのコピーを作成するだけで、必要な情報のみを格納してアルゴリズムを使用することはできませんか? –

答えて

0

最も簡単な方法は、Bがそれに作業する配列を渡すようにAを書くことです(したがって、ローカルに変更されたもの)。あなたがそれをしたくない理由がありますか?

def func(arr): 
    return arr[0] 

(ちなみに、funcはその引数を無視します)。

関連する問題