append vs + []

참고 : 널널한 교수의 코딩 클래스


(1) case 1 : .append()

  • 리스트 객체의 변경

  • 새로운 객체가 생성되고, 해당 새로운 객체를 참조할 수 있는 요소가 생성되는 것

    ( 리스트는 mutable 객체 )

  • id 변화 없음

figure2


(2) case 2 : + []

  • 리스트 객체를 rebinding
  • (처음부터) 아예 새로운 참조할 수 있는 요소들이 생성
  • garbage memory 가 생성됨
  • id 변화 있음

figure2


(3) code

case 1. append.py

t1 = time.time()
a=[]
for i in range(100000):
    a.append(i)
t2 = time.time()

print(t2-t1)

case 2. rebind.py

  • 속도도 느리고
  • garbage memory도 발생한다
t1 = time.time()
a=[]
for i in range(100000):
    a=a+[i]
t2 = time.time()

print(t2-t1)

case 3. range.py

t1 = time.time()
a=list(range(100000))
t2 = time.time()

print(t2-t1)

case 4. nparange.py

  • numpy를 사용하면 C와 비슷한 속도 얻을 수 있다!
t1 = time.time()
a= np.arange(100000)
t2 = time.time()

print(t2-t1)

Comparison

PS C:\Users\LSH\Desktop\advanced_python> python append.py
0.010991334915161133

PS C:\Users\LSH\Desktop\advanced_python> python rebind.py
12.35270643234253

PS C:\Users\LSH\Desktop\advanced_python> python range.py 
0.0010008811950683594

PS C:\Users\LSH\Desktop\advanced_python> python nparange.py
0.0