大きなデータセットからオブジェクトを解析するとき、私はしばしば情報を集合オブジェクトに集約し、それをリストに変換してソートします。例えば変数名の上書きはパフォーマンス上のメリットをもたらしますか?
、ここでのコードスニペットのようになります。
all_times = set([])
for row in dataset:
time = parse_out_time(row)
all_times.add(time)
sorted_times = sorted(list(all_times))
私の質問は、その最後の割り当てについてです。私はPythonが再利用されていない古い変数名に割り当てられたデータを削除するには自動ガベージコレクションを持っていることを知ってソートされたリスト
all_times = sorted(list(all_times))
と同じ変数名を再割り当てすることができます。このアプローチは、Pythonインタプリタが古いセットのall_timesに属するメモリを直ちに割り当て解除できるように思えます。上記のコードを数百万のデータセットのループで実行すると、これが重要になる可能性があります。
あなたが再び使用することのない変数名を書くと、パフォーマンス上の利点がありますか?あるいは、Pythonのガベージコレクタは、スクリプトによってもう一度呼び出されない変数のメモリをすぐに割り当て解除するのに十分なほどスマートですか?
*「名前でもう一度参照しない」*とはどういう意味ですか?名前が定義されているスコープの終わりまで、それらの名前で再度アクセスされるかどうかに関わらず、その名前によって引き続き参照されます。 – jonrsharpe
@jonrsharpeスクリプトがその変数をもう一度呼び出さないという明確化を追加しました – kingledion
それから、私が知っている限り、そのような最適化はありません。大規模で不要なオブジェクトを保持することが懸念されている場合は、使用していない識別子を明示的に 'del'する必要があります(現在行っているように他のものに割り当てる必要があります)そのような最適化が不十分な実装では正しく動作します。 – jonrsharpe