Python과 C에서 인수 전달과 객체 참조 이해
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

객체 참조를 통한 인수 전달 이해

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

  • Python 및 C 언어를 배우는 초보 개발자
  • 메모리 관리와 인수 전달 방식을 이해하고자 하는 프로그래머
  • 난이도: 중간 (메모리 개념과 참조/값 전달 차이를 설명)

핵심 요약

  • Python에서는 가변 객체(예: 딕셔너리)가 참조로 전달되어 함수 내부에서 변경 시 원본에 영향을 준다
  • C에서 기본 타입(int)은 값 전달로, 포인터를 사용해야 원본을 수정할 수 있다
  • box = {"item": "another box"}와 같은 재할당은 새로운 객체를 생성해 원본을 변경하지 않는다

섹션별 세부 요약

1. Python의 객체 참조 메커니즘

  • my_box 변수는 딕셔너리 객체의 메모리 주소(예: 0x1234)를 참조
  • change_box(my_box)는 해당 주소를 복사하여 함수 내부에서 동일한 객체를 조작
  • box["item"] = "new toy"는 0x1234 주소의 객체를 수정해 my_box에도 반영

2. C의 값 전달과 포인터 사용

  • try_to_change(int x)num의 값을 복사(0x2000 주소)하여 변경 시 원본(0x1000)에 영향 없음
  • change_number(int ptr)num의 주소(#)를 전달해 ptr = 100으로 원본을 직접 수정

3. 재할당 시 발생하는 변화

  • box = {"item": "another box"}는 새로운 딕셔너리(0x5678)를 생성하여 my_box는 0x1234에 남음
  • C의 포인터 재할당(ptr = malloc(...))은 새로운 메모리 주소를 가리키게 해 원본과 분리

결론

  • Python에서 가변 객체는 참조로 전달되지만, 재할당은 새로운 객체를 생성
  • C에서는 포인터를 사용해야 원본 값을 수정할 수 있음
  • 메모리 주소 개념과 참조/값 전달 차이를 철저히 이해해야 실무에서 버그를 방지할 수 있음