카테고리 없음

[python]함수에서 변수 수정 후 반환 안되는 오류 해결

YUM 2021. 5. 17. 23:06

처음에 작성했던 코드는 대략 아래와 같았다.

def A(num_list, dir) :
    if not dir:
        dir = {num:[] for num in num_list}
        
    for num in num_list :
        dir[num] = [n for n in range(num)]
    
if __name__ == "__main__":
    res = {}
    A([1, 2, 3], res)
    print(res)

위 코드는 예시이고, 재귀를 사용해서 좀 더 복잡한 형태였다.

그런데 여기서 res를 출력했더니 빈 dictionary를 출력한다.

내 생각대로라면 dir에 새로운 내용이 추가되었으니 변경된 dictionary가 출력되어야 했다.

그리고 하나하나 찬찬히 보다가, 함수 내에서 dictionary를 새로 생성해 준 것이 문제인가 하고 아래처럼 바꿨다.

def A(num_list, dir) :
    if not dir:
    # 바꾼부분 ====
        for num in num_list :
            dir[num] = []
    # =============
    
    for num in num_list :
        dir[num] = [n for n in range(num)]
    
if __name__ == "__main__":
    res = {}
    A([1, 2, 3], res)
    print(res)

그랬더니 예상한 변경된 dictionary가 반환 되었다!

아마 첫번째 코드에서 함수를 실행하면서 함수의 parameter로 받은 dictionary를 변형하는 것이 아니라 새로 선언을 했기 때문에, 함수 내 dir 변수가 로컬 변수(함수 내에서만 사용되는 변수)로 지정되었고, 함수가 끝난 이후 그 값이 변수 res에는 반영이 되지 않은 것 같다.