파이썬(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