Call-by-reference.
6일차
벌써 6일차이다.매일매일 꾸준히 올리기를 희망한다.
오늘 배운것은 Call-by-reference이다.
알아보도록 하자!
Call-by-reference
다음은 Call-by-reference의 특징이다.
- 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다. 함수가 종료되면 해당 공간은 사라진다.
- call-by-reference 참조에 의한 호출방식은 함수 호출시 인자로 전달되는 변수의 레퍼런스를 전달한다. (해당 변수를 가르킨다.)
- 따라서 함수 안에서 인자의 값이 변경되면, 아규먼트로 전달된 객체의 값도 함께 변경된다.
이러듯 call-by-value 와는 다르게 호출을 하게 되면 값을 복사하는게 아닌 주소값을 가지게 되는데,그렇다면 Call-by-reference,call-by-value는 어떤기준으로 나누어질까?
그건 바로 매개변수의 자료형에 의해 결정된다.
Call-by-reference는 매개변수의 자료형이 List,Tuple,Dicitionary등, call-by-value 는 int,float,string,boolean등 이 있는것으로 알수있다.
그럼 바로 예시로 가보자
Call-by-reference 예시
1 def bar(argA):
2 b_temp = 1
3 argA.append(b_temp)
4 foo(argA)
5 argA.append(True)
6
7
8 def foo(argFA):
9 del argFA[0]
10 f_temp = "hello"
11 han(f_temp)
12 f_temp = "jung"
13
14 return f_temp
15
16 def han(argHA):
17 print(argHA)
18
19 myList = [2, 3]
20
21 bar(myList)
22
23 print(myList)
위의 코드는 Call-by-reference를 이용하여 스택을 쌓기위해서 준비된 소스코드이다.그럼 이 코드를 이용하여 스택을 그려보자.
/reference(1).jpg)
위의 이미지는 코드를 순서대로 진행함에 따라 변수를 저장하는 모습을 볼수있는데 Call-by-reference 의 모습을 볼수있는것은
인자값을 복사하는게 아닌 주소값을 넣는것을 볼수있다.
/reference(2).jpg)
han 함수칸이 없어진걸 볼수있는데 위의 코드를 보면 더 이상 han함수가 안쓰여지는걸 볼수있다.그렇게 되면 저장소는 han함수 저장소를 삭제한다.
/reference(3).jpg)
마찬가지로 함수가 끝나게 되면 함수를 삭제한다.여기서 볼수있는것은 Call-by-reference 방식으로 호출했기 떄문에 다른 함수에서 정의된 인자값이 주소값을 통해 main 에 있는 리스트에 인자값이 변하는걸 볼수있다.
/reference(4).jpg)
마지막까지 코드가 진행되면 위와같이 main만 남고 코드가 끝나면 저장소가 없어진다.
오늘은 Call-by-reference 대해 알아보았다.
앞으로도 배운게 있다면 배운것을 그렇지 않은날은 공부한것을 포스팅 해보겠다. 끝
댓글남기기