티스토리 뷰
[edu] call of value, call of reference (주소 에 의한 호출, 값 에 의한 호출)
burningrizen 2019. 1. 30. 15:55함수 호출 방식에서
call of value 는 함수에 값을 넘겨주는 것이고
call of reference 는 함수에 주소를 넘겨주는 것이다.
파이썬에서는 이것이 어떻게 동작하는 지 알아보자
함수에 인자 값을 넘겨 주고 그 함수에서 해당 인자를 수정해 보자
def foo(a):
a = 10
n = 1
foo(n)
print(n)
n 은 몇이 출력 될까?
1 이 출력된다.
이유는 a 변수에 값 1이 할당되고
a 을 10 으로 변경하였지만 foo 함수가 종료되는 시점에 foo 함수안에 a 이라는 변수는 해제된다.
그리고 함수밖에 n은 그대로 1 이다.
[id]
이것을 실제로 확인해 보기 위해 id 라는 함수를 이용해보자
id 는 객체의 고유 주소값을 리턴하는 함수이다.
예를 들어 a, b 가 주소값이 서로 같다는건 a 를 변경해도 b가 변경되고
b 를 변경해도 a가 변경된다는 의미이다.
a, b 의 고유 주소값이 같다는 것은 곧 같은 주소에 있다는 뜻이다.
def foo(n):
print("before", id(n))
print("10", id(10))
n = 10
print("after", id(n))
a = 1
foo(a)
print("result", id(a))
출력
before 1560266880
10 1560267024
after 1560267024
result 1560266880
여기서 재밌는 사실이 있는데 주소값이 foo 함수 첫줄에서
a 와 n 이 동일하다.
그리고 n 을 10 으로 재 정의 하니까 주소 값이 달라 진다.
여기서 id(10), 과 id(n) 의 값이 같다.
물론 결론적으로 밖의 a 는 그대로 1 이다
여기서 알 수 있는 사실은
int 형 변수인 경우에 넣는 숫자에 따라 주소값이 달라진다.
그리고 함수 내부에서 바꾸어도 외부에서는 값이 바뀌지 않는다.
def foo(n):
print("before", id(n))
n[0] = 99
print("after", id(n))
a = [1, 2, 3]
foo(a)
print("result", id(a))
print(a)
출력
before 55461008
after 55461008
result 55461008
[99, 2, 3]
리스트의 경우를 살펴 보자
a 의 주소값과 n 의 주소값은 동일하다
그리고 n[0] 의 값을 바꾼 후에도 n 의 주소값은 동일하다
즉 같은 주소 a, n 은 같은 주소 값이 유지되고
n 을 변경하면 a 도 변경이 된다.
결론적으로 파이썬은 다른 언어에서 얘기하는 call of value , call of reference 둘다 아니다
데이터 타입에 따라 다르다
'python lecture > basic' 카테고리의 다른 글
[edu] if문 (조건문) (0) | 2019.01.30 |
---|---|
[edu] variable (변수) (0) | 2019.01.30 |
[edu[ coroutine (코루틴) (0) | 2019.01.30 |
[edu] 딕셔너리 컴프리헨션 (dictionary comprehensions) (0) | 2019.01.30 |
[edu] 딕셔너리 (dictionary) (0) | 2019.01.30 |
- Total
- Today
- Yesterday
- pycrypto
- 면접정답
- 장고
- Tistory
- 문과 코딩
- 문서 비교
- chatbot
- django chatbot
- gitlab
- admin.py
- 파이썬
- 파이썬 독학
- 파이썬 프로그래밍
- 모바일 테마 적용
- GIT
- 파이썬 입문
- 장고 카톡 자동응답
- 파이썬 강좌
- 엑셀 비교
- gitignore
- Python
- 장고 플러스친구 자동응답
- wsgi
- 플러스친구 자동응답
- virtualenv
- django
- 이미지 비교
- PuTTYGen
- 면접답변
- 모바일 스킨 적용
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |