본문 바로가기

개발자 레니는 지금 -/소프트웨어와 함께

[ Python ] len() 과 sys.getsizeof() 는 같을까? 다를까?

Len() and sys.getsizeof() are the same? or different?

#Ubuntu 16.04 LTS

#Python 3.5.2



평소에 아무 생각 없이 size를 구하다가 그냥 문득 궁금해졌다.

len(), sys.sizeof() 그리고 __sizeof__() 는 같은 걸까? 같은 크기를 반환할까?


정답은? 드래그 해보세요 >>   아 니 다 


그렇다면 어떻게 다른지에 대해서 한 번 알아보도록 하자.


They are not the same thing at all.


len에 대한 설명을 가져오면 아래와 같다.


Return the length (the number of items) of an object. The argument may be a sequence (string, tuple or list) or a mapping (dictionary).

객체의 길이(항목의 수)를 반환한다. 인수는 시퀀스(문자열, 튜플 또는 리스트), 매핑(딕셔너리) 일 수 있다.

깨알 tip + 시퀀스는 index가 있어 순서를 정할 수 있지만 매핑은 index가 없어 순서가 없다.



반면, sys.getsizeof에 대한 설명은 이렇다.


Return the size of an object in bytes. The object can be any type of object. All built-in objects will return correct results, but this does not have to hold true for third-party extensions as it is implementation specific.

객체의 사이즈를 bytes 단위로 반환한다. 

모든 타입의 객체가 가능하다. 모든 내장 객체는 바른 결과를 반환하지만 구현에 따라 해당하지 않는 경우도 있다.

getsizeof() calls the object’s __sizeof__ method and adds an additional garbage collector overhead if the object is managed by the garbage collector.

getsizeof() 는 __sizeof__ 메서드 호출하는데 객체가 garbage collector에 의해 관리되는 경우 garbage collector overhead를 추가한다.


= 원래 size보다 조금 더 큰 값이 출력해진다.


한 마디로 정리하자면, len은 () 안에 포함 된 항목의 수 자체를 반환하고 sys.getsizeof와 __sizeof__는 ( sys.getsizeof 실행 시 실제는 sizeof를 부를 것과 같다. ) 객체의 크기를 bytes 단위로 반환한다.


= 두 가지 method가 반환하는 size의 기준이 다르다.

Testing


간단한 테스트를 진행해보자


코드

print('len(\'\') >> ', len(''))

print('sys.getsizeof(\'\') >> ', sys.getsizeof(''))etsizeof(\'\') >> ', sys.getsizeof(''))






#2018년04월12일