파이썬의 내장 데이터 구조를 사용하여 메모리 사용량을 최적화하는 방법

메모리 사용량은 프로그램의 실행 속도와 효율성에 큰 영향을 미칩니다. 특히 대용량 데이터를 다루는 경우에는 메모리 사용량을 최적화하는 것이 매우 중요합니다.

파이썬은 기본적으로 메모리 관리를 자동으로 처리해주지만, 여전히 데이터 구조 선택과 메모리 사용 패턴을 고려하는 것이 좋습니다. 이 글에서는 파이썬의 내장 데이터 구조를 사용하여 메모리 사용량을 최적화하는 몇 가지 방법을 알아보겠습니다.

1. 리스트 대신 제너레이터 사용하기

리스트는 메모리에 모든 요소를 한 번에 저장하므로, 대용량 데이터를 다룰 때 메모리 부족 문제가 발생할 수 있습니다. 이런 경우에는 제너레이터를 사용하는 것이 좋습니다. 제너레이터는 한 번에 하나의 요소만 메모리에 유지하므로 메모리 사용량을 크게 줄일 수 있습니다.

# 리스트 생성
numbers = [1, 2, 3, 4, 5]

# 제너레이터 생성
numbers_generator = (x for x in numbers)

위의 예시에서는 리스트를 생성한 후, 제너레이터를 이용해 같은 데이터를 처리합니다. 이렇게 하면 메모리 사용량을 크게 줄일 수 있습니다.

2. 딕셔너리 대신 디폴트딕트(defaultdict) 사용하기

파이썬의 딕셔너리는 키-값 쌍을 메모리에 저장합니다. 하지만 만약 존재하지 않는 키에 접근하려고 하면 KeyError가 발생합니다. 이런 경우에는 디폴트딕트를 사용하여 메모리를 최적화할 수 있습니다.

디폴트딕트는 딕셔너리와 동일한 동작을 하지만, 존재하지 않는 키에 접근할 때 예외가 발생하는 대신 디폴트값을 반환합니다. 이를 통해 메모리 사용량을 줄일 수 있습니다.

from collections import defaultdict

# 디폴트값이 0인 디폴트딕트 생성
count_dict = defaultdict(int)

# 키를 추가하고 값을 증가시킴
count_dict['apple'] += 1
count_dict['banana'] += 1
count_dict['apple'] += 1

print(count_dict)  # defaultdict(<class 'int'>, {'apple': 2, 'banana': 1})

위의 예시에서는 디폴트값이 0인 디폴트딕트를 생성한 후, 키를 추가하고 값을 증가시킵니다. 존재하지 않는 키에 접근하더라도 예외가 발생하지 않고 디폴트값인 0을 반환합니다.

메모리 사용량을 최적화하기 위해서는 데이터 구조를 신중하게 선택하는 것이 중요합니다. 리스트 대신 제너레이터를 사용하거나, 딕셔너리 대신 디폴트딕트를 사용하는 방법을 통해 메모리 사용량을 효율적으로 관리할 수 있습니다.

#python #memory #optimization