이름과 객체 (개인적으로 가장 중요하다고 생각하는 개념중 하나)
Programming/Python 2012. 11. 22. 14:44 |파이썬은 다른 많은 언어와는 달리 변수의 이름과 값 객체가 분리되어 있다. 예를 들어, a = 1 이란 문에서 숫자 1이 변수 a에 저장되는 것이 아니다.
파이썬에서는 a를 이름, 숫자 1을 객체라고 하며, 두 개념은 분리되어 있다.
그림으로 표현하면 이렇다.
(이름 a) -----------------> (객체 1)
즉, 이름 a는 객체 1을 가리킨다. 객체1은 별도의 위치에 존재하고 있는 것이다.
※ 일반적인 컴파일러 언어(소스 코드를 기계어 수준으로 번역해서 실행하는 언어. C언어가 대표적이다.) 는 이름과 객체의 개념이 분리되어 있지 않다. 컴파일러 언어에서의 이름은 번역될 때 실제 메모리 주소로 모두 변환되므로 프로그램을 수행하는 런타임 시점에서는 이러한 심볼의 이름들은 의미가 없다.
즉, 변수 혹은 객체의 이름은 해당 객체의 주소로 변환된다.
이에 반해서 파이썬과 같은 동적인 자료형을 가지는 언어에서는(대부분의 스크립트 언어) 변수의 생성과 소멸이 언제든지 일어날 수 있기 때문에 이름이 주소로 변환되지 않고 별도의 장소에 이름이 보관된다.
그리고, 이름과 객체와의 관계 정보를 추가로 가지고 있다. 이름이 저장되는 장소를 '심볼 테이블(Symbol Table)' 이라고 한다.
객체의 치환
간단한 테스트를 통해 a의 값을 바꿔서 b,c의 값이 바뀌는지를 확인하면,
공유객체인지 아니면 분리된 객체인지 (참조로 되는지, 복사로 되는지를) 확인할 수 있다.
a[1]의 값만을 변경했는데 b와 c가 같이 변했다. 이 결과는 객체가 공유된다는 뜻이다.
사실 이름 a는 객체의 레퍼런스를 나타내는 것이므로 b와 c는 동일 객체의 레퍼런스만 저장하고 있는 것이다.
※ 일반적으로 python에서의 치환은 대부분 레퍼런스에 의해 이루어진다.
만일 객체의 복사를 원한다면 객체에 따른 방법을 적용하거나 일괄적으로 copy 모듈을 이용하면 된다.
python에서 일반적인 변수가 C언어의 pointer 변수와 똑같구나..!!
'Programming > Python' 카테고리의 다른 글
자료형의 종류 (0) | 2012.11.25 |
---|---|
문자열로 된 파이썬 코드 실행 (0) | 2012.11.22 |
파이썬의 keyword (0) | 2012.11.21 |
파이썬 환경 변수 설정 (0) | 2012.11.21 |
리눅스에서 스크립트 실행하기 (0) | 2012.11.21 |