반응형

1. 주석문

주석(Comment)은 코드의 내용을 설명하거나, 참조할 사항 등을 기록하는 것으로 프로그램 실행에는 전혀 영향을 미치지 않는다.


주석은 라인 어디에서나 시작할 수 있다. 한 라인에서 # 다음에 나오는 문자들은 주석으로 취급된다.


2. 연속 라인

줄바꾸기 앞의 ‘\’는 다음 라인을 현재 라인과 연결시켜 주는 역할을 한다.


3. 치환문

= 문은 우변의 객체 혹은 식을 좌변의 이름에 할당하는 것이다. 치환문(Assignment) 혹은 대입문이라고 한다. 변수 이름은 선언될 필요가 없다. 필요한 시점에서 치환하면 변수는 생성된다. 변수의 형은 우측의 객체에 의해서 결정된다.


하지만 다음과 같은 문은 에러이다. = 문은 좌변에 치환될 변수명이 와야 하기 때문이다.


‘=’은 ‘등호’가 아니라 치환 연산자이다. 오른쪽의 값을 왼쪽에 갖다 놓으라는 뜻이다.

‘등호’를 위한 연산자는 ‘==’라는 것이 있다. 등호는 두 개의 값이 동일한지 그렇지 않은지를 판별한다. 파이썬 2.2 이하에서는 만일 결과 값이 0이면 다른 값(거짓)임을, 1이면 같은 값(참)임을 나타낸다. 파이썬 2.3부터는 True, False로 진리 값을 나타낸다.

여러 값을 한 줄에 치환하는 기능을 보자.


그러나 다음과 같은 C 형식은 허용되지 않는다.


왜냐하면 ‘b = c + d’는 식(Expression)이 아니라 문(Statement)이기 때문이다. ‘x = y = z = 0’이 가능한 것은 파이썬 자체가 이러한 형식의 문을 지원하기 때문이지 ‘z = 0’이 식이기 때문이 아니다.


4. 확장 치환문

C 언어에서 사용되던 연산자로 앞서 배운 연산자를 치환문과 함께 사용할 수 있다. 확장 치환 연산자의 종류는 다음과 같다.


--------------------------------------------------------------------------------------------------------------------------

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, **=

--------------------------------------------------------------------------------------------------------------------------


‘x op=y’의 의미는 ‘x = x op (y)’와 같다. 즉, ‘a += 2’는 ‘a = a + (2)’와 같다.


5. 이름과 객체

파이썬은 다른 많은 언어와는 달리 변수의 이름과 값 객체가 분리되어 있다. 예를 들어, a = 1 이란 문에서 숫자 1이 변수 a에 저장되는 것이 아니다. 파이썬에서는 a를 이름, 숫자 1을 객체라고 하며, 두 개념은 분리되어 있다. 다음과 같은 구조를 가진다.


** 이름과 객체

일반적인 컴파일러 언어(소스 코드를 기계어 수준으로 번역해서 실행하는 언어, C언어가 대표적)는 이름과 객체의 개념이 분리되어 있지 않다. 컴파일러 언어에서 이름은 번역될 때 실제 메모리 주소로 모두 변환되므로 프로그램을 수행하는 런타임 시점에서는 이러한 심볼의 이름들은 의미가 없다. 즉, 변수 혹은 객체의 이름은 해당 객체의 주소로 변환된다.

이에 반해서 파이썬과 같은 동적인 자료형을 가지는 언어에서는(대부분은 스크립트 언어) 변수의 생성과 소멸이 언제든지 일어날 수 있기 때문에 이름이 주소로 변환되지 않고 별도의 장소에 이름이 보관되며, 이름과 객체와의 관계 정보를 추가로 가지고 있다. 이름이 저장되는 장소를 심볼 테이블(Symbol Table)이라고 한다.


6. 객체의 치환

다음과 같은 코드가 있다.


Y와 Z는 각각 객체 X를 내부 항목으로 지정했다. 이 때,

1. Y나 Z 안에 X가 복사되어 삽입되는 경우

(원래의 [1,2,3] 객체 이외에 또 다른 객체가 만들어지고, 새로 만들어진 [1,2,3] 객체가 Y와 Z에 삽입되는 경우)

2. [1,2,3]은 그대로 하나만 존재하고, 이 객체에 대한 참조만 Y와 Z에 삽입되는 경우

위 두가지의 경우가 발생할 수 있다.


테스트 코드로 이것을 확인할 수 있다.

즉, X의 값을 하나 바꿨을 때 Y와 Z에 영향을 미치면 이것은 공유 객체, 그렇지 않으면 분리된 객체이다.


X[1]만을 변경했는데, Y와 Z가 같이 변했다. 이것은 객체가 공유된다는 뜻이다. 사실 이름 X는 객체의 레퍼런스를 나타내는 것이므로 Y와 Z는 동일 객체의 레퍼런스만 저장하고 있는 것이다.


일반적으로 파이썬에서의 치환은 대부분 레퍼런스에 의해 이루어진다. 만일 객체의 복사를 원한다면 객체에서 따른 방법을 적용하거나 일괄적으로 copy모듈을 이용하면 된다.  

반응형

+ Recent posts