[파이썬] 함수 호출 CALL BY VALUE/CALL BY REFERENCE

2019.10.06 17:13개발/파이썬

파이썬에서 함수 호출 시 call by value/ref 를 설명하는 간단한 예제입니다 

1. bool, 문자열, 숫자, 리스트,  딕셔너리를 함수에서 변경했을 때 

def testFunc2(bValue, sString, nValue, list, dic):
    bValue = True
    sString = '새로운 문자'
    nValue = nValue + 100
    list.append(100)
    dic['과학'] = 70


bValue = False
sString = '이전 문자'
nValue = 10
list = [1,2,3]
dic = {'국어': 80, '수학': 95, '영어': 80}
testFunc2(bValue, sString, nValue, list, dic)

print(bValue)
print(sString)
print(nValue)
print(list)
print(dic)

 

결과: 리스트와 딕셔너리만 call by ref 로 넘겨짐

False
이전 문자
10
[1, 2, 3, 100]
{'국어': 80, '수학': 95, '영어': 80, '과학': 70}

 

2. 함수에서 딕셔너리 생성해서 넘기기

def testFun():
    item = {}
    item['x'] = 100
    item['y'] = 200
    item['z'] = 200
    return item


datas = testFun()    
print(datas)
 

결과:

{'x': 100, 'y': 200, 'z': 200}

 

3. (주의)함수에서 넘겨 받은 리스트나 딕셔너리를 초기화하면 다른 로컬 변수를 함수 내에 새로 선언 한 것으로 판단하게 되어 call by ref 처럼 작동하지 않게 된다.

def testFunc3(list, dic):
    list = []
    dic = {}
    list.append(4)
    dic['국어'] = 80

list = [1,2,3]
dic = {'국어': 80, '수학': 95, '영어': 80}
testFunc3(list, dic)
print(list)
print(dic)

 

결과:

[1, 2, 3]
{'국어': 80, '수학': 95, '영어': 80}