Swap 함수를 만들어보자
1. IN Python 불가능
def swap(num1, num2):
temp = num1
num1 = num2
num2 = temp
num1 = 10
num2 = 20
swap(num1, num2)
result ?
2. IN C언어에서는 가능
void swap(int &num1, int &num2){
int temp = *num1;
*num1 = *num2;
*num2 = temp;
값참조(Call by value)
- 메모리상에 존재하는 주소에있는 "값"을 참조
- 때문에 넘겨받은 함수의 인자값을 아무리 변경해도 외부에서 그값은 변경되지 않는다
*오해 할만한 것
- 아래의 내용은 p라는 객체를 함수의 인자로 전달했다
함수내에서는 값을 전달받아 그값(객체)의 내부 값을 변경한 것이지
넘겨받은 값을 변경한것은 아니다
class Person:
name = ""
def __init__(self, name):
self.name = name
def changeName(person):
person.name = "galid"
p1 = Person("jjy")
print(p1.name)
changeName(p1)
print(p1.name)
- 값참조의 경우 함수의 인자로 값만을 넘기므로 함수내에서
그값을 변경하더라도 변경이 일어나지 않는다
class Person:
name = ""
def __init__(self, name):
self.name = name
def changeName(person):
person = Person("galid")
p1 = Person("jjy")
print(p1.name)
changeName(p1)
print(p1.name)
주소 참조(Call by reference)
- 메모리상에 존재하는 주소값을 참조
- C언어의 *(포인터)
- C언어의 포인터는 주소참조를 제공하므로 그 주소에 접근하여 값을 변경할 수 있다
void swap(*int num1, *int num2){
temp = *num1;
*num1 = *num2;
*num2 = temp;
}
- 파이썬의 함수에 인자로 리스트등을 넘겨주는 것은 해당 리스트를 참조할수 있는 주소를 넘겨주는 것
파이썬의 가변타입 불가변타입
1. 불가변수
- int, str, float, double
- 함수에 전달될 때 메모리에 할당된 그값만을 복사해 보낸다
- 불 가변수이므로 주소값을 주지 않는다
- A = 1
B = A 의 경우 A의 값만을 복사
따라서 B의 값을 바꾸더라도 A는 그대로
2. 가변수
- list, dict, set, instance 등
- 함수에 전달될 때 참조값(메모리위치를) 전달한다
'Cloud 교육 > 웹프로젝트' 카테고리의 다른 글
웹프로젝트 보안 (0) | 2018.12.17 |
---|---|
3일차 라이브러리와 모듈 - 수정중 (0) | 2018.12.14 |
2일차 - CPU, 메모리 , 예약어 , 변수 , 함수 (0) | 2018.12.12 |
1일차 과제(if, for, while, List 실습) (0) | 2018.12.11 |
계획 (0) | 2018.12.11 |