파이썬 함수 안에서 바깥에 list를 조작하고자 할때는 a+=b,
와 같은assign 명령어를 사용하지 말라.
파이썬에서 list
를 다룰 때 주의할 점이 있다.
실제 현장에서는 거의 그럴일이 없지만, 알고리즘 테스트에서는
함수 바깥 scope 에 있는 list
에 접근
하여 변경을 가하는 경우가 있다.
a = [1,2,3]
def myfunc():
a.append(4)
myfunc()
와 같은 식으로 말이다. string variable는 변경할 수 없지만 list variable을 변경할 수 있다는 점에서 매우 유용하다.
하지만!!!
절대로 a += b,
와 같이 assign 을 이용한 방식으로 사용해서는 안된다. 사용할 수없다.
의미상 a.append(b)
와 a+=b (혹은 a+=b, 만약 nested로 넣는다면)
는 크게 다르지 않다. list 안에 새로운 값을 추가하는 것 이상도 이하도 아니다.
그런데 전자는 reference 주소에 가서 변경하는 것이고, 후자는 a = a + b
로써 a 라는 새로운 변수를 선언하는 것이다. myfunc
안에서 어떤 값을 선언하는 것은 바깥에 있는 값과 달리 local variable
로 새로운 주소값에 생성하겠다는 것이고, 이 때에는 바깥 scope
에 있는 a를 의미하는게 아니라 local scope
안에서만 사용되는 새로운 a를 만든다는 의미가 된다.
그래서 Local variable 'list' referenced before assignment
메시지가 발생한다.
이중 함수를 작성하는 경우 global 변수를 사용할 때에는 상위 함수에서 만든 변수는 global로 선언할 수 없다. 모든 함수 바깥에서 선언해주어야 한다.