파이썬에서는 "Call by Assignment" 또는 "Call by Object Reference"라는 메커니즘을 사용하여 함수에 인자를 전달합니다. 이 용어는 파이썬이 함수의 인자를 처리하는 방식을 설명하는 데 사용되며, "Call by Value"와 "Call by Reference"의 전통적인 구분과는 약간 다릅니다.
Call by Assignment의 작동 원리:
변수 할당: 파이썬에서 변수에 값을 할당할 때, 실제로는 객체에 대한 참조를 생성하는 것입니다. 변수는 단지 메모리 상의 객체를 가리키는 이름일 뿐입니다.
함수 호출 시: 함수에 인자를 전달할 때, 객체 참조가 함수로 전달됩니다. 즉, 함수의 매개변수는 전달받은 객체에 대한 새로운 참조를 생성합니다.
가변 객체와 불변 객체:
- 불변 객체(Immutable): 숫자, 문자열, 튜플과 같은 불변 객체를 함수에 전달하고, 함수 내에서 이 객체를 변경하려고 하면 새로운 객체가 생성되고, 원래 객체는 변경되지 않습니다.
- 가변 객체(Mutable): 리스트, 딕셔너리, 집합과 같은 가변 객체를 함수에 전달하고, 함수 내에서 이 객체를 변경하면 원래 객체가 변경됩니다. 이는 함수가 객체의 참조를 통해 직접 객체를 수정하기 때문입니다.
예시:
불변 객체 예시:
def update_number(x):
x += 10
num = 5
update_number(num)
print(num) # 출력: 5
가변 객체 예시:
def update_list(a_list):
a_list.append(4)
my_list = [1, 2, 3]
update_list(my_list)
print(my_list) # 출력: [1, 2, 3, 4]
요약:
"Call by Assignment"에서는 함수에 인자를 전달할 때 객체의 참조가 전달됩니다. 함수 내에서 인자로 받은 객체를 변경할 수 있는지 여부는 객체가 가변(mutable)인지 불변(immutable)인지에 따라 달라집니다. 가변 객체는 함수 내에서 변경될 수 있으며, 불변 객체는 새로운 객체가 생성됩니다. 이러한 메커니즘은 파이썬의 동작 방식을 이해하는 데 중요하며, 파이썬에서 데이터를 함수 사이에서 어떻게 전달하고 처리하는지를 파악하는 데 도움이 됩니다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
classmethod와 staticmethod의 차이 (0) | 2024.03.21 |
---|---|
파이썬에서 접근제어 지시자 (0) | 2024.03.20 |
r string, u string이란 (0) | 2024.03.20 |
__repr__, __str__의 차이점 (0) | 2024.03.20 |
__new__, __init__ 차이점 (0) | 2024.03.20 |