1. Call by Value (값에 의한 호출)
- "Call by Value"는 함수 호출 시에 매개변수로 전달되는 것이 변수의 값을 복사하여 전달되는 방식
- 함수 내에서 매개변수 값이 변경되어도 호출한 쪽의 변수 값은 변경되지 않는다.
- 이는 함수 내에서 매개변수의 값이 새로운 메모리 공간에 복사되어 사용되기 때문에 발생한다.
def increment(x):
x += 1
print("Inside function: ", x)
num = 5
increment(num)
print("Outside function: ", num)
1. `increment(num)` 호출 시, `num`의 값인 5가 함수로 전달된다.
2. 함수 내에서 `x`가 1 증가하고, 그 값은 6이 된다.
3. 호출된 쪽에서의 `num` 값은 변경되지 않고, 여전히 5로 유지된다.
2. Call by Reference (참조에 의한 호출)
- "Call by Reference"는 함수 호출 시에 매개변수로 전달되는 것이 변수의 메모리 주소(참조)
- 함수 내에서 매개변수를 통해 값이 변경되면 호출한 쪽의 변수 값도 함께 변경된다.
- 이는 함수 호출 시에 변수의 메모리 주소가 전달되어, 함수 내에서 해당 메모리 주소를 통해 변수에 접근하고 수정할 수 있기 때문에 발생한다.
def append_item(lst):
lst.append(4)
print("Inside function: ", lst)
my_list = [1, 2, 3]
append_item(my_list)
print("Outside function: ", my_list)
1. `append_item(my_list)` 호출 시, `my_list`의 메모리 주소가 함수로 전달된다.
2. 함수 내에서 `lst`를 통해 `my_list`에 새로운 요소가 추가되고, 결과는 `[1, 2, 3, 4]`가 된다.
3. 호출된 쪽에서의 `my_list` 역시 변경되어, 동일한 값을 가지게 된다.
핵심 요약
- "Call by Value"는 함수 호출 시에 매개변수로 전달되는 것이 변수의 값을 복사하여 전달되는 방식이며, 함수 내에서 매개변수 값의 변경이 호출한 쪽의 변수에 영향을 주지 않는다.
- 함수 호출 시에 매개변수의 값이 새로운 메모리 공간에 복사되어 사용되기 때문에 함수 내에서의 변경이 호출한 쪽에 영향을 주지 않는다.
- "Call by Reference"는 함수 호출 시에 매개변수로 전달되는 것이 변수의 메모리 주소(참조)이며, 함수 내에서 매개변수를 통해 값이 변경되면 호출한 쪽의 변수 값도 함께 변경된다.
- 함수 호출 시에 변수의 메모리 주소가 전달되어, 함수 내에서 해당 메모리 주소를 통해 변수에 접근하고 수정할 수 있기 때문에 호출한 쪽의 변수 값도 변경된다.
'CS' 카테고리의 다른 글
OSI(Open Systems Interconnection) (0) | 2024.04.10 |
---|---|
가비지 컬렉션(Garbage Collection) (0) | 2024.04.09 |
오버플로우(Overflow) (0) | 2024.04.05 |
동기화와 교착상태 (1) | 2024.04.04 |
고차 함수와 재귀 함수 (0) | 2024.04.03 |