特定のクラスの各インスタンスには独自の辞書があります。これは、多数の同じように構造化されたクラスオブジェクトが存在する場合に、多くのスペースを無駄にする可能性があります。これは実際のケースか、基礎となるメカニズムがより効率的であるかどうか、明示的に要求された場合にのみオブジェクトの辞書を作成することです。 私は、クラスを使用するのを避け、代わりに名前付き定数を持つシーケンスをインデックスとして使用すると、非常に多数の、おそらく数百万のオブジェクトを持つアプリケーションを検討していますか?クラスオブジェクトのデータ効率
答えて
オーバーヘッドを減らしたい場合は、実際に必要なものに応じて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. Zobristキーの効率的なデータ構造
- 2. 効率的な25GBデータのXML解析
- 3. リーダーボードの効率的なデータ構造
- 4. ファイアベースの効率的なデータ構造化?
- 5. ハッシュ効率のRedis - hmset()ハッシュ効率
- 6. 効率的なデータ保存、システム(例)
- 7. 効率的なデータ複製方法
- 8. データを効率的に保存する
- 9. 効率
- 10. 効率
- 11. Javascriptの効率
- 12. オペレーティングシステムの効率
- 13. SQLCommandBuilderの効率
- 14. クエリの効率
- 15. "イベントハンドリング"の効率
- 16. ルートの効率
- 17. J2MEのHashTable効率
- 18. Djangoのクエリ効率
- 19. C++での効率
- 20. Cloudiness、Imgixの効率
- 21. Androidアプリライブラリの効率
- 22. Excelファイルサイズの効率
- 23. LEFT JOINの効率
- 24. AESのメモリ効率
- 25. のMySQL&PDO:効率
- 26. jQueryのフィルタ効率
- 27. Javaメソッドの効率
- 28. jQueryセレクタの効率
- 29. Thread.sleep()での効率
- 30. 高効率のNSBitmapImageRep
百万は非常に多くありません:
またはnamedtupleとして:
は、例えば、ちょうど2つの属性「姓」と「FIRSTNAME」を持つクラスは、として実装することができ'__slots__'をチェックアウトする必要があります。たとえば、ここでは:http://stackoverflow.com/questions/472000/usage-of-slots –
@Paul Hankin答えがあったはずですが、私はそれを上回る可能性があります。正確に私が探していた答えです。 –
__slots__変数に指定された要素にしかアクセスできないため、入力エラーが早期に検出されるという利点があります。これは本当にPythonのドキュメントではるかに目立つはずです。 –