파이썬 코딩을 할때 유용한 팁으로 원하는 값을 미리 생성하느냐 아니면 문법으로 정의해 놓고 필요할때 마다 빼는 방식이냐에 따라 메모리 사용량이 달라 진다.
아래 예제 코드를 살펴 보도록 하자
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 |