컴퓨터 사이언스

Call By Value, Call By Reference Python

woohap 2024. 9. 30. 00:00

파이썬은 모든 것을 객체로 본다.

즉, 파이썬은 할당된 값의 종류에 따라 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 

요약

  1. 파이썬은 Call By Object Reference임
  2. 파이썬은 인자로 전달되는 값이 Immutable 인지 Mutable 객체인지에 따라 Call By Value인지 Call By Referece가 결정됨
  3. Immutable의 경우 Call By Value
  4. 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