큰 스크립트나 여러 줄의 코드를 작성할 때 메모리 관리가 최우선 순위가 되어야 합니다. 그러므로 우리는 좋은 프로그래밍 지식과 더불어 메모리를 효율적으로 처리하는 방법에 대한 좋은 지식도 가지고 있어야 합니다. 프로그램에 존재하는 특정 객체의 메모리 크기를 얻기 위해 Python에는 많은 함수가 제공되며, 그러한 함수 중 하나가 __sizeof__()입니다. 이 튜토리얼에서는 __sizeof__() 함수와 Python 프로그램 내에서 작동하는 방법에 대해 알아봅니다.
파이썬 __sizeof__() 함수
Python의 __sizeof__() 함수는 객체의 크기를 정확하게 알려주지 않습니다. Python은 생성기의 크기를 미리 알 수 없으므로 생성기 개체의 크기를 반환하지 않습니다. 하지만 실제로는 메모리를 차지하는 특정 객체의 내부 크기(바이트 단위)를 반환합니다.
이를 이해하기 위해 끝없는 생성기 개체가 있는 다음 예제 프로그램을 살펴보겠습니다.
문자열 자바
예시 1: 다음 Python 프로그램을 살펴보세요.
# A default function with endless generator object in it def endlessGenerator(): # A counting variable to initialize the generator counting = 0 # Using while loop to create an endless generator while True: yield counting counting += 1 # Creating infinite loop # Printing memory size of a generator object print('Internal memory size of endless generator object: ', endlessGenerator.__sizeof__())
산출
Internal memory size of endless generator object: 120
설명:
우리는 프로그램에서 무한 생성기 객체를 생성하기 위해 기본 함수인 unlimitedGenerator()를 사용했습니다. 함수에서 변수를 초기화했습니다(예: counting = 0). 루프에 중단점을 제공하지 않고 counting 변수에 while 루프를 사용했습니다. 함수에 무한 루프를 생성하여 기본 함수를 무한 생성기 개체로 만들었습니다. 마지막으로 __sizeof__() 함수를 사용하여 무한 생성기 객체의 내부 메모리 크기를 인쇄했습니다.
배우 레카
이제 __sizeof__() 함수의 기능을 명확하게 이해할 수 있습니다. 위 프로그램의 끝없는 생성기 개체에는 끝이나 중단점이 없기 때문에 Python은 생성기의 크기를 미리 알 수 없습니다. 하지만 동시에 생성기 개체가 Python에서 일부 내부 메모리를 차지해야 하므로 __sizeof__() 함수를 통해 생성기 개체에 할당된 내부 메모리 크기를 확인할 수 있습니다.
__sizeof__() 함수를 사용하여 오버헤드 없이 내부 메모리 크기를 얻는 예제를 하나 더 살펴보겠습니다.
예 2:
# Define an empty list in the program emptyList = [] # Printing size of empty list print('Internal memory size of an empty list: ', emptyList.__sizeof__()) # Define some lists with elements a = [24] b = [24, 26, 31, 6] c = [1, 2, 6, 5, 415, 9, 23, 29] d = [4, 5, 12, 3, 2, 9, 20, 40, 32, 64] # Printing internal memory size of lists print('Memory size of first list: ', a.__sizeof__()) print('Memory size of second list: ', b.__sizeof__()) print('Memory size of third list: ', c.__sizeof__()) print('Memory size of fourth list: ', d.__sizeof__())
산출
Internal memory size of an empty list: 40 Memory size of first list: 48 Memory size of second list: 104 Memory size of third list: 104 Memory size of fourth list: 136
설명:
__sizeof__() 함수를 사용하면 빈 목록의 내부 메모리 크기가 40바이트이고 목록에 있는 모든 요소가 목록의 전체 메모리 크기에 8바이트 크기를 추가한다는 것을 분명히 알 수 있습니다.