본문 바로가기
언어/파이썬

함수의 인자 전달

by hazel_ 2021. 3. 30.

1. 단순 원시값인 경우 (int, char 등)

def test(a):
    a=20
    print("test함수 내 a의 id = ",id(a))
    print("test함수 내 a의 값 = ",a)
    print()


a=50
print("a에 50을 줬을때 a의 id = ",id(a))
print("a에 50을 줬을때 a의 값 = ",a)
print()


test(a)
print("test함수를 다녀온 후 a의 id = ",id(a))
print("test함수를 다녀온 후 a의 값 = ",a)
print()

  • 함수를 들어가기 전 a의 값과 함수에서 나온 후 a의 값이 같다.
  • 함수 내에서 a의 주소와 함수 밖에서 a의 주소가 다르다.
  • 함수에서 a의 값을 바꿔도 함수 밖 a는 변하지 않는다.

 

 

2. mutable 한 객체인 경우

def test(a):
    a.append(9)
    print("test함수 내 a의 id = ",id(a))
    print("test함수 내 a의 값 = ",a)
    print()


a=[1,2,3]
print("a에 [1,2,3]을 줬을때 a의 id = ",id(a))
print("a에 [1,2,3]을 줬을때 a의 값 = ",a)
print()


test(a)
print("test함수를 다녀온 후 a의 id = ",id(a))
print("test함수를 다녀온 후 a의 값 = ",a)
print()

  • 함수를 들어가기 전 a의 값과 함수를 나온 후 a의 값이 다르다.
  • 함수 내 a의 주소와 함수 밖 a의 주소가 같다.
  • 함수 내에서 a의 값을 바꾸면, 함수 밖 a의 값 또한 바뀐다.

결과

mutable한 객체는 함수에 들어갈 때 새로운 주소를 할당받는 것이 아니다.

같은 객체(즉, 같은 주소)가 들어간다.

 

따라서, 단순 원시값인 경우에 함수 내에서 Argument값을 수정해도 함수 바깥의 값에 영향을 미치지 않지만,

mutable한 객체는 함수 내에서 수정하면 함수 바깥의 값까지 영향을 미친다.

댓글