Technology/Python

[Python] 리스트에 요소를 계속 추가한다면 어떻게 될까

문베디드 2022. 5. 3. 23:19

파이썬에서 제공하는 자료형인 리스트(list)는 요소(element)를 임의로 추가/삭제하고 사용자의 편의대로 조작할 수 있는 다양한 기능을 제공합니다.

그런데 리스트에는 최대 몇개의 요소가 추가 될수 있는지 고민해본 사람이 있었습니다.

그사람의 말에 의하면 리스트 최대 요소 갯수는 9,223,372,036,854,775,807개 라고 합니다.

 

https://bskyvision.com/1263

 

[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조원..ㅋ

 즉, 예산만 주어진다면 가능하다가 답이겠네요. 그런데 굳이?ㅎㅎ

바이트 크기 https://ko.wikipedia.org/wiki/테라바이트

 

 

4. 실질적 결론

일단 일반적인 프로그래밍 환경에서는 불가능합니다.

그럼 얼마나 많은 요소를 실제 사용가능한지 확인해볼까요? 실험으로...^^

실행 소스 코드는 다음과 같습니다!!

메모리 에러가 발생하면 리스트의 사이즈를 출력하도록 하였습니다.

1
2
3
4
5
6
7
8
= [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 만큼 사용 가능하다!!

 

메모리 침범이 일어난 시점과 Python 실행화면