あなたのPythonオブジェクトで50 %少ないメモリを消費します
デフォルトでは、Pythonではオブジェクトにdict属性があります.
キーあたりのオブジェクト変数にアクセスするための辞書です.
これは動的変数の作成を許可するのに便利です.
🚩しかし、この柔軟性は新しいオブジェクト変数の作成につながります.Pythonは指定した名前の新しい変数を作成します.
スロットを使用すると、データ変数を明示的に宣言できます.
その後、Pythonはメモリ上のスペースを割り当て、dict属性の作成をスキップします.
⛔また、スロット属性で宣言されていないオブジェクトの変数の作成を禁止します.
スロットを使用すると、クラスインスタンスで使用されるメモリも減少します.
スロットは、python 3を使用している場合、データクラスでも使用できます.10以上.単に装飾に
⚡オブジェクトの多くを作成している場合、それは巨大な違いになります!
ジェローム
キーあたりのオブジェクト変数にアクセスするための辞書です.
これは動的変数の作成を許可するのに便利です.
🚩しかし、この柔軟性は新しいオブジェクト変数の作成につながります.Pythonは指定した名前の新しい変数を作成します.
スロットを使用すると、データ変数を明示的に宣言できます.
その後、Pythonはメモリ上のスペースを割り当て、dict属性の作成をスキップします.
⛔また、スロット属性で宣言されていないオブジェクトの変数の作成を禁止します.
スロットを使用すると、クラスインスタンスで使用されるメモリも減少します.
スロットは、python 3を使用している場合、データクラスでも使用できます.10以上.単に装飾に
slots=True
を加えてください.⚡オブジェクトの多くを作成している場合、それは巨大な違いになります!
from dataclasses import dataclass
# https://pypi.org/project/Pympler/
from pympler.asizeof import asizeof
# Dataclass with slots
@dataclass(frozen=True, slots=True)
class SmallObjectWithDataclass:
first_name: str
last_name: str
# Class with slots
class SmallObject:
__slots__ = ["first_name", "last_name"]
def __init__(self, first_name, last_name) -> None:
self.first_name: str = first_name
self.last_name: str = last_name
# Class with no slots
class BiggerObject:
def __init__(self, first_name, last_name) -> None:
self.first_name: str = first_name
self.last_name: str = last_name
p = SmallObjectWithDataclass("Jerome", "K")
print(asizeof(p)) # Output: 160 Bytes
p2 = SmallObject("Jerome", "K")
print(asizeof(p2)) # Output: 160 Bytes
p3 = BiggerObject("Jerome", "K")
print(asizeof(p3)) # Output: 392 Bytes
🦄これが助けて、素晴らしい日を持つことを望んでくださいジェローム
Reference
この問題について(あなたのPythonオブジェクトで50 %少ないメモリを消費します), 我々は、より多くの情報をここで見つけました https://dev.to/jeromek13/consume-50-less-memory-with-your-python-objects-3ie6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol