파이썬(Python)/문법

선언 전 메모리절약, range, getsizeof

끄적끄적아무거나 2020. 11. 20. 08:00

파이썬 코딩을 할때 유용한 팁으로 원하는 값을 미리 생성하느냐 아니면 문법으로 정의해 놓고 필요할때 마다 빼는 방식이냐에 따라 메모리 사용량이 달라 진다. 

 

아래 예제 코드를 살펴 보도록 하자

 

import sys

a_var = range(30)
b_var = list(a_var)
c_var = [i for i in range(30)]

print(a_var)
print(b_var)
print(c_var)

print(len(a_var))
print(len(b_var))
print(len(c_var))

print(sys.getsizeof(a_var))
print(sys.getsizeof(b_var))
print(sys.getsizeof(c_var))

 

결과>>

range(0, 30)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
30
30
30
24
148
168

 

a_var의 경우 range(30) 객체가 변수에 들어가 있고 b_var와 c_var는 리스트를 생성을 완료 하였다.

 

length를 비교 했을때 실제값으로 선언인지 객체선언인지와는 상관없이 동일한 값을 가진다. 이러한 조건을 이용해 코드를 짜는 데는 문제 없이 진행할 수 있다.

 

그리고 메모리 사이즈를 sys.getsizeof로 확인해 보면 차이가 많이 나는 것을 알 수 있다. b_var와 c_var 사이에서도 생성 방식에 따른 약간의 메모리 차이가 발생했다.

 

 

 

 

 

 

'파이썬(Python) > 문법' 카테고리의 다른 글

locals(), globals()  (0) 2020.11.23
enumerate, index값 불러오기  (0) 2020.11.21
yield, next 란  (0) 2020.11.20
list comprehension, for if문 써서 한줄로 list 만들기  (0) 2020.11.19
lambda, map 함수  (0) 2020.11.18