Python 객체로 메모리를 50% 적게 사용
4848 단어 python
키별로 개체 변수에 액세스하는 데 사용되는 사전입니다.
동적 변수의 생성을 허용하는 것이 유용합니다.
🚩그러나 철자가 틀리면 이러한 유연성으로 인해 새로운 개체 변수가 생성될 수 있습니다. 파이썬은 주어진 이름으로 새로운 변수를 생성할 것입니다.
슬롯을 사용하면 구체적으로 데이터 변수를 선언할 수 있습니다.
그런 다음 Python은 메모리에 공간을 할당하고 dict 속성 생성을 건너뜁니다.
⛔또한 Slot 속성에 선언되지 않은 개체의 변수 생성을 금지합니다.
슬롯을 사용하면 클래스 인스턴스에서 사용하는 메모리도 줄어듭니다.
python3.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.)