2017-05-19 11 views
1

インスタンス化された同じクラスの1000の異なるオブジェクトがあり、そのキーが1から1000の整数で、その値が1000のオブジェクトである辞書にそれを割り当てるとします。Pythonで本当にメモリを消費するのは何ですか?

ここでは、タプル(obj1,1)、(obj2,2)などの別の辞書を作成します。objは同じ1000個のオブジェクトです。そしてその値は1から1000です。

1000個のオブジェクトが各辞書のキーと値にあるため、これらの2つの辞書の存在はメモリ使用量が倍増することを意味しますか?

これは正しくありませんか?新しいオブジェクトを作成しているわけではないので、単に同じオブジェクトに参照を割り当てるだけです。だから私は1000の類似した辞書をそれらのオブジェクトの値またはキー(タプルの一部)として持つことができ、メモリ使用量の大幅な増加はない。

そうですか?

+4

オブジェクト自体をコピーする必要はありませんが、それぞれのオブジェクトの背後にあるポインタを作成する必要があります。オブジェクトが小さい場合は、実際には「メモリ使用量が大幅に増加します」。 –

+1

http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables – Lanting

+0

@aryamccarthyこれらのオブジェクトへのポインタは軽量ですが、なぜ私は大幅に増加しますか? – user1008636

答えて

1

オブジェクトはコピーされずに参照されます。

オブジェクトが小さい場合(例:整数)、タプルまたはdictのリストのオーバーヘッドは重要です。

オブジェクトが大きい場合(たとえば、非常に長い一意の文字列の場合)、オーバーヘッドはオブジェクトのサイズに比べてずっと小さいため、同じメモリの別のdict/listの作成によりメモリ使用量はあまり増加しませんオブジェクト。

関連する問題