特定のクラスの各インスタンスには独自の辞書があります。これは、多数の同じように構造化されたクラスオブジェクトが存在する場合に、多くのスペースを無駄にする可能性があります。これは実際のケースか、基礎となるメカニズムがより効率的であるかどうか、明示的に要求された場合にのみオブジェクトの辞書を作成することです。 私は、クラスを使用するのを避け、代わりに名前付き定数を持つシーケンスをインデックスとして使用すると、非常に多数の、おそらく数百万のオブジェクトを持つアプリケーションを検討していますか?クラスオブジェクトのデータ効率
答えて
オーバーヘッドを減らしたい場合は、実際に必要なものに応じて2つのオプションがあります。
クラスのような構造が必要な場合は、__slots__
の使用を検討する必要があります。これにより、__dict__
は回避されますが、メソッドやプロパティなどを持つことができます。あなたは動的に属性を追加する能力を失います(あなたは__slots__
としてリストされているものに制限されています)。
オブジェクトの「記憶域」を必要とし、メソッドや同様の方法が不要な場合は、collections.namedtuple
を使用できます。これらのアイテムは、クラスに似たインターフェースを提供し、空間効率がかなり良いはずです。 、
>>> from collections import namedtuple
>>> Person = namedtuple('Person', 'firstname, lastname')
>>> p = Person('Tom', 'Riddle')
>>> p
Person(firstname='Tom', lastname='Riddle')
>>> p.firstname
'Tom'
動的にメンバーを追加することができないというのは、私の意見ではより多くのメリットがあります。私はnamedtupleについて知らなかったし、そうでなければそれを良い解決策と考えていただろうが、__slots__は優れているようだ。 –
@ChrisBarry両方ともユースケースを持っています。私は '__slots__'が優れていることに同意しています(メソッドと実際のプロパティを許可します)が、場合によっては"クラスのような "不変のストレージコンテナが必要なだけで、' namedtuple'が実用的な方法です。 – MSeifert
各オブジェクトに保存するデータによって異なりますが、ほとんどの場合、リストで行う必要があります。
- 1. リーダーボードの効率的なデータ構造
- 2. Zobristキーの効率的なデータ構造
- 3. 効率的な25GBデータのXML解析
- 4. 効率的なデータ複製方法
- 5. 効率的なデータ保存、システム(例)
- 6. データを効率的に保存する
- 7. ハッシュ効率のRedis - hmset()ハッシュ効率
- 8. Javascriptの効率
- 9. オペレーティングシステムの効率
- 10. ルートの効率
- 11. クエリの効率
- 12. SQLCommandBuilderの効率
- 13. "イベントハンドリング"の効率
- 14. Djangoのクエリ効率
- 15. JavaScriptコードの効率
- 16. jQueryセレクタの効率
- 17. 高効率のNSBitmapImageRep
- 18. Pythonアルゴリズムの効率
- 19. AESのメモリ効率
- 20. Thread.sleep()での効率
- 21. C++での効率
- 22. J2MEのHashTable効率
- 23. Excelファイルサイズの効率
- 24. のMySQL&PDO:効率
- 25. バイト配列を分割してJavaクラスオブジェクトのフィールドをマップする効率的な方法
- 26. Accumulo:効率的なクエリのためのデータのインデックス方法
- 27. データの重いサイトの効率を上げるためのアイデア
- 28. を効率的
- 29. 効率的
- 30. 効率が
百万は非常に多くありません:
またはnamedtupleとして:
は、例えば、ちょうど2つの属性「姓」と「FIRSTNAME」を持つクラスは、として実装することができ'__slots__'をチェックアウトする必要があります。たとえば、ここでは:http://stackoverflow.com/questions/472000/usage-of-slots –
@Paul Hankin答えがあったはずですが、私はそれを上回る可能性があります。正確に私が探していた答えです。 –
__slots__変数に指定された要素にしかアクセスできないため、入力エラーが早期に検出されるという利点があります。これは本当にPythonのドキュメントではるかに目立つはずです。 –