대뜸 다음 코드에서 값이 어떻게 나올지 예상해 보자.
def spam(eggs):
eggs.append(1)
eggs=[2,3]
ham=[0]
spam(ham)
print(ham)
그래, 배열은 메모리 주소값을 할당하는 거라고 했고, 함수 spam에 인수로 넣은 ham이 eggs가 되는 격이니까 답은 [2,3]! 이라고 했다면...
ㅎㅎ이 글을 보게 된 것이 다행이다!!
spam에 함수의 parameter는 eggs이다. 따라서 우리가 ham을 spam에 넣어준 동시에 함수의 parameter eggs는 ham 자체가 된다.
3행에서 eggs는 새로운 리스트를 만드는 코드이다. 그래서 이 경우, 더는 ham과 eggs와 같은 메모리 주소를 가리키지 않고 eggs는 자신만의 메모리 주소를 가지게 된다.
함수 속에서 객체호출(call by object reference)란
새로운 값을 할당하기 전까진 기존에 넘어온 인수 객체의 주소값을 쓰는 방식이라고 이해하자!
사실 내가 직접 코드를 쓸 때 굳이 이렇게 쓸 것 같지는 않지만,
다른 사람의 코드를 이해할 때 이런 사소한 것에서 혼동하지 말자는 자세로 공부하자!
'알고리즘 > 이론' 카테고리의 다른 글
[PS|DP] 부분배열과 부분집합의 구현 (0) | 2023.06.15 |
---|---|
[PS] 분할정복 (0) | 2022.08.13 |
[PS] binary search 정리 (0) | 2022.08.12 |
[PS] sort 와 sorted 차이(python | 미세한 차이지만 확실히 알아두기) (0) | 2022.06.11 |