크기는 가장 바깥 쪽 개체를 나타내며 중첩 된 개체는 참조하지 않습니다. 원근감이 getsizeof
인 경우 개체 크기는 개체의 크기와 개체가 아닌 개체에 포함 된 포인터의 크기를 더한 크기입니다. 다음에서 이것을 볼 수 있습니다
>>> import sys
>>> sys.getsizeof([])
64
>>> sys.getsizeof([[]])
72
>>> sys.getsizeof([[[]]])
72
>>> sys.getsizeof([[],[]])
80
>>> sys.getsizeof([[[]],[[]]])
80
당신이 반복적으로 객체의 크기를 찾거나 다른 메모리 프로파일 링을 사용해야합니다 중 총 메모리 사용량을 얻을합니다.
또한 자신의 개체를 작성하고 getsizeof
크기를 올바르게 반환하려면 직접 __sizeof__
메서드를 구현할 수 있습니다.
import sys
class mylist:
def __init__(self, iterable):
self.data = list(iterable)
def __sizeof__(self):
return object.__sizeof__(self) + \
sum(sys.getsizeof(v) for v in self.__dict__.values()) + \
sum(sys.getsizeof(item) for item in self.data)
original_data = [[1,2,3], [1,2,3]]
print(sys.getsizeof(original_data))
foo = mylist(original_data)
print(sys.getsizeof(foo))
결과 :
~/code_snippets$ python3 sizeof_list.py
80
336
당신이 [문서]를 읽을나요 (https://docs.python.org/3/library/sys.html#sys.getsizeof), 구체적으로 예를 들어, "객체에 직접적으로 기여한 메모리 소비 만 차지하고 그것이 말하는 객체의 메모리 소비가 아니라"라고 말한 부분. – BrenBarn
@ BrenBarn 사실 나는 그렇지 않았고 내 질문에 답합니다. 고맙습니다! –
http://stackoverflow.com/a/30316760/533399 – DhruvPathak