본문 바로가기
목차
Python

Python의 함수에서 return 의 이해

by ds31x 2025. 12. 7.
728x90
반응형

1. return 사용하기: function call 은 expression이므로 하나의 값으로 evaluate됨.

def 함수이름(매개변수):
    실행할 코드
    return 반환값

return은 다음 두 가지 일을 수행:

  • 함수 실행을 즉시 종료
  • 호출한 곳으로 결과를 전달: 해당 function call을 해당 결과로 reduction.

예제:

def add(a, b):
    return a + b

result = add(3, 4)
print(result)   # 7

위의 동작은 흔히 다음과 같이 언급됨:

“함수는 값을 return 한다”

 

하지만 엄밀히 애기하면 값에 해당하는 객체를 참조하고 있는 reference가 반환되는 것임


2. return이 생략된 경우

다음 코드를 보자.

def f():
    x = 10

result = f()
print(result)

출력은 다음과 같다.

None

 

Python에서는 return 문이 없으면 자동으로 None을 반환.

 

즉, 아래 두 함수는 동등함:

def f1():
    x = 10

def f2():
    x = 10
    return None
  • None은 하나의 객체
  • resultNone 객체를 참조

3. return은 값을 복사하지 않음

정확히 애기하면
Python에서 return은 객체(object)에 대한 참조(reference)를 반환.


3-1. return의 실제 동작: 객체 참조 모델

다음 예제를 보자.

def f():
    x = [1, 2, 3]
    return x

y = f()

이때 일어나는 일은 다음과 같다.

  1. [1, 2, 3] 이라는 리스트 객체가 생성됨
  2. 함수 내부 이름 x가 해당 객체를 참조
  3. return x 실행
  4. 함수 밖 변수 y같은 객체를 참조
x => [1, 2, 3]
y => [1, 2, 3]
  • 객체는 복사되지 않음.
  • return은 당 객체의 참조만 전달.

3-2. return 후 함수 내부 변수(function stack frame에 저장된)는 제거됨:

return이 실행되면 함수는 종료되고,

  • 함수의 stack frame 제거
  • 함수 내부 지역 변수 소멸

앞서의 예에서의 x라는 이름은 제거됨.

하지만 x가 가리키던 객체(앞서 예에선 list객체)는 남아 있음.
그 이유는 반환 이후 y가 이를 참고하고 있기 때문임.

객체의 생존 여부는
scope가 아니라 reference 여부로 결정됨.

 


4. mutable 객체를 return 하는 경우

mutable 객체(list, dict 등)를 반환하는 경우

def make_list():
    return []

lst = make_list()
lst.append(1)

함수 밖에서 반환된 리스트 객체를 수정할 수 있음

  • 위의 예에서 보이듯이
  • return이 리스트 객체의 참조를 넘겼고
  • lst가 그 객체를 그대로 사용하고 있기 때문임

5. immutable 객체를 return 하는 경우

def f():
    x = 10
    return x

y = f()

이 경우에도,

  • xy는 같은 int 객체를 참조함

그런데 다음 코드를 실행하면?

y = y + 5

앞서의 경우 참조된 mutable 리스트의 값이 바뀌는 것과 달리,
이 경우엔 y에 새로운 객체가 할당됨: 새로운 객체는 연산의 결과 값을 가짐.

 

이는 다음으로 이해할 수 있음:

  1. y + 5 : 새로운 int 객체 생성
  2. y가 새 객체를 가리키게 변경됨.

주의할 점은

  • 기존 10 객체는 변경되지 않음
  • 이름만 y로 같을 뿐 새 객체를 참조하게 됨.

요약

  • return은 언제나 객체 참조를 반환
  • mutable 객체 : 내부 변경 가능
  • immutable 객체 : 변경 불가, 이후 변경되는 연산시 새로운 객체 생성되고 해당 객체를 참조하게 됨

같이보면 좋은 자료들

https://dsaint31.tistory.com/506

 

[Python] Function Definition, Call and Arguments

이 문서는 function에 대한 간단한 소개를 하고 있다.일부 자세한 내용들은 관련 URL을 추가하는 형태로 확장될 수 있음.Function이란?재사용성 과 가독성 을 위해 논리적으로 코드를 나누는(or 그룹화

dsaint31.tistory.com


https://ds31x.tistory.com/123

 

[Python] function 과 Scope, Name Space 정리 - Summary

Function이란?https://dsaint31.me/mkdocs_site/CE/ch05/ch05_02_01_function/ BME228Function in the Programming Mathematics에서의 function과 약간의 차이점이 있으나 프로그래밍에서의 function은 많은 부분에서 Mathematics에서의 fu

ds31x.tistory.com


 

728x90