5

私はPythonを使用しており、引数の1つとして巨大なリストを取る再帰関数があります:

# Current implementation
def MyFunction(arg1, arg2, my_huge_list)
    ...
    ...
    MyFunction(new_arg1, new_arg2, my_huge_list)

上記のように、同じlistMyFunctionを使用して再帰的に呼び出されます。他の引数とは異なり、これは変更されません。繰り返しますが、このリストは膨大です。私の友人は、パフォーマンスを改善するためにグローバル変数として扱うことができると提案しました。そうしないと、この膨大なリストが反復ごとに何度もコピーされる可能性があります。my_huge_listmy_huge_list

# Friend's suggestion

MyHugeList=[a,b,c, ...and many many other elements... ]

def MyFunction(arg1, arg2)
    global MyHugeList
    ...
    ...
    MyFunction(new_arg1, new_arg2)

上記のようにグローバル変数を使用すると、元のバージョンよりもアルゴリズムのパフォーマンスが向上しますか? 私のプログラムは数週間実行されるため、長期的にはわずかな改善でも価値がある場合があります。

4

2 に答える 2

2

いいえ、Python の引数は参照によって渡されます。
より正確には、Python の変数は、実際のデータのメモリ アドレスを格納する単なるポインタです。そのため、Python の変数ポインターが関数に渡された場合 (値によって渡された場合)、実際のデータを指すアドレスは、値によって関数に渡された変数と変数の値がオブジェクトへの参照であることを意味します。

そのトピックの詳細:

于 2013-10-04T18:00:36.100 に答える