파이썬에서 제공하는 자료형인 리스트(list)는 요소(element)를 임의로 추가/삭제하고 사용자의 편의대로 조작할 수 있는 다양한 기능을 제공합니다.
그런데 리스트에는 최대 몇개의 요소가 추가 될수 있는지 고민해본 사람이 있었습니다.
그사람의 말에 의하면 리스트 최대 요소 갯수는 9,223,372,036,854,775,807개 라고 합니다.
[python] 파이썬 리스트에 최대 몇 개의 요소가 들어갈 수 있을까?
파이썬 개발을 하다가 파이썬 리스트에 최대 몇 개의 요소(element)가 들어갈 수 있는 지를 대략적으로 알아야 하는 상황이 생겼습니다. 구글링 해보니 방법은 간단하더군요. 표준 모듈인 sys 를 활
bskyvision.com
간단한 질문을 던져봅니다.
9,223,372,036,854,775,807개를 넘어가는 요소 수를 저장하는것이 가능할까요?
간단한 질문인데 생각해 볼게 많겠죠
1. "넘어가는"게 얼마나 넘어가는것인가
만약 +1,2 개라면 list 1개를 더 추가해서 저장할수 있겠지만 MAX_elements * N 개라면?
즉 list를 동적으로 생성하는 코드를 추가해야 저장가능합니다.
2. 넘어가는건 고사하고 MAX 만큼 저장은 가능한가?
자료요소 1개당 1byte로 잡아도 대량 9,223,372 TB 만큼의 저장공간이 필요하네요.
해당 저장공간을 마련할 수 있다면 저장 가능하다고 대답할 수 있겠죠.
3. 저장공간은 마련 가능한가?
MS Onedrive 개인 저장공간을 1TB 플랜(월 \8,900)을 활용한 경우 9,223,372개 구입하면 됩니다.
대략 820억 필요;;
그럼 외장하드로 하면 구글에 "최대 외장하드" 치면 24TB 짜리가 나옵니다. (\939,000/EA) 그럼 384,308개 필요하니까
3600억 필요합니다;;;;
근데.. 클라우드나 외장하드를 사용하면 프로그램에서 I/O처리를 해줘야 하잖아요? 그럼 메모리를 늘립니다.
이 저장공간을 만약 memory로 다 확보한다면 일단 64bit CPU의 최대 메모리는 16EB(Exabyte) = 16,000,000TB 이니까 메모리를 무진장 꽂는다면 가능은 하겠네요... 32GB*4 세트 메모리 가격(\840,000)으로 계산하면
비용은 60조원..ㅋ
즉, 예산만 주어진다면 가능하다가 답이겠네요. 그런데 굳이?ㅎㅎ
4. 실질적 결론
일단 일반적인 프로그래밍 환경에서는 불가능합니다.
그럼 얼마나 많은 요소를 실제 사용가능한지 확인해볼까요? 실험으로...^^
실행 소스 코드는 다음과 같습니다!!
메모리 에러가 발생하면 리스트의 사이즈를 출력하도록 하였습니다.
1
2
3
4
5
6
7
8
|
a = [0]
cnt = 1
while 1:
try:
a.append(cnt)
cnt += 1
except MemoryError as err:
print(len(a))
|
cs |
현재 8/15.9GB 사용중인 PC에서 메모리 에러 날때까지 파이썬에서 list 에 요소를 추가해봤습니다.
가용메모리 7.9GB 상황에서 381,365,332 개 추가하고 죽어버리네요 ㅎㅎ
실험대로면 리스트 요소당 20B 씩 잡아먹네요..? 위에 저장공간에 비용에 x20 추가..
결론은 내PC에 남는 메모리 byte 수 ÷ 20 만큼 사용 가능하다!!