파이썬 주의할 점 - local variable

Kanto(칸토)·2023년 9월 12일
0

알고리즘 인터뷰

목록 보기
18/30

TL;DR

파이썬 함수 안에서 바깥에 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 메시지가 발생한다.

profile
통계학으로 사람들의 행동을 이해하고 싶습니다.

1개의 댓글

comment-user-thumbnail
2023년 9월 28일

이중 함수를 작성하는 경우 global 변수를 사용할 때에는 상위 함수에서 만든 변수는 global로 선언할 수 없다. 모든 함수 바깥에서 선언해주어야 한다.

답글 달기

관련 채용 정보