파이썬은 모든 것을 객체로 본다.
즉, 파이썬은 할당된 값의 종류에 따라 Call By Value가 될 수도, Call By Reference가 될 수 있음.
Immutable과 Mutable
Immtable
- 수정 불가능한 객체
int, boolean, float, str, tuple 등등
Mutable
- 수정 가능한 객체
list, set, dictionary, bytearray, 사용자 정의 클래스
Immutable 객체 -> Call By Value
## 함수 내에서 인자로 받은 객체의 값을 아무리 변경해도 외부에 선언된 값은 변경되지 않음
def funcA(num) :
num += 100
a = 100
funcA(a)
print(a)
## 출력 결과
## 100
Mutable 객체 -> Call By Reference
## 함수 내에서 인자로 받은 객체를 변경하면 값이 변경됨
## 단, 객체 자체를 변경하는 경우에는 외부 객체에 영향을 주지 않음
listA = [3, 2, 4, 1]
def funcB(inputList) :
inputList.append(5)
inputList.append(6)
# 여기까지는 객체 자체를 변경하는게 아니라 참조하는 것이므로 5, 6 원소가 listA에 저장됨
inputList = [1, 2, 3, 4]
#inputList 변수에 새로운 객체를 할당했으므로 기존 객체 참조가 아닌 새로 생성된 객체 참조
inputList.append(7)
inputList.append(8)
funcB(listA)
print(listA)
## 출력 결과
## 3, 2, 4, 1, 5, 6
요약
- 파이썬은 Call By Object Reference임
- 파이썬은 인자로 전달되는 값이 Immutable 인지 Mutable 객체인지에 따라 Call By Value인지 Call By Referece가 결정됨
- Immutable의 경우 Call By Value
- Mutable 경우 Call By Reference
'컴퓨터 사이언스' 카테고리의 다른 글
1의 보수, 2의 보수 (0) | 2024.10.04 |
---|---|
JPG, PNG, GIF 차이점 (1) | 2024.10.03 |
C언어 포인터 (0) | 2024.10.02 |
실수 표현법(부동 소수점, 고정 소수점) (0) | 2024.10.01 |
32비트와 64비트 차이 (0) | 2024.09.29 |