Python에는 C나 Java 같은 언어에서 사용하는 단항 증감 연산자(++/--)가 존재하지 않습니다. 대신 값을 1만큼 증가시키려면 다음과 같이 작성합니다.
a += 1
값을 1만큼 감소시키려면 다음을 사용합니다.
a -= 1
기본 예제
>>> a = 0 >>> >>> # 증가(Increment) >>> a += 1 >>> >>> # 감소(Decrement) >>> a -= 1 >>> >>> # a의 값 확인 >>> a 0
Python은 같은 작업을 수행하는 여러 가지 방법을 제공하지 않는다는 철학을 가지고 있습니다. 따라서 증감 연산자 대신 복합 할당 연산자(+=, -=)를 사용하는 것이 Pythonic한 방식입니다.
C 언어 경험자라면 주의할 점
C 계열 언어에 익숙하다면 한 가지 중요한 차이점을 이해해야 합니다. Python에는 C에서처럼 '변수(variable)'라는 개념이 없습니다. 대신 Python은 이름(name)과 객체(object)를 사용하며, 정수(int) 타입은 불변(immutable)입니다.
예제를 통해 살펴보겠습니다.
>>> a = 1 >>> print(id(a)) 1919375088 >>> print(hex(id(a))) 0x726756f0
위 코드가 의미하는 바는 다음과 같습니다. 값이 1인 int 타입 객체를 생성하고, 그 객체에 이름 a를 붙입니다. 즉, 객체는 값이 1인 int의 인스턴스이며, 이름 a는 그 객체를 참조합니다. 할당된 이름 a와 그것이 참조하는 객체는 서로 구별되는 존재입니다.
a += 1 실행 시 내부 동작 과정
이제 a를 증가시켜 보겠습니다.
>>> a += 1 >>> print(id(a)) 1919375104 >>> print(hex(id(a))) 0x72675700
int는 불변이므로, Python은 위 문장을 다음과 같은 단계로 처리합니다.
a가 참조하는 객체를 찾습니다 (id:0x726756f0)해당 객체의 값을 조회합니다 (값: 1)
값에 1을 더합니다 (1 + 1 = 2)
값이 2인 새로운 int 객체를 생성합니다 (id:
0x72675700)이름
a를 새 객체에 재바인딩(rebind)합니다이제
a는 새 객체(0x72675700)를 가리키며, 기존 객체(0x726756f0)는 더 이상a에 의해 참조되지 않습니다. 만약 다른 이름도 기존 객체를 참조하지 않는다면, 해당 객체는 나중에 가비지 컬렉션으로 메모리에서 회수됩니다.
정리하면, a += 1은 a를 a + 1로 재할당(reassign)하는 것입니다. 이는 진정한 의미의 증감 연산자가 아닙니다. a 자체를 '증가'시키는 것이 아니라 새로운 값을 다시 할당하기 때문입니다.
여러 이름이 하나의 객체를 참조하는 경우
추가 예제를 통해 증가/감소 동작을 더 명확하게 이해해 보겠습니다.
>>> a = b = c = 1 >>> id(a) 1919375088 >>> id(b) 1919375088 >>> id(c) 1919375088 >>> # 위 세 이름은 모두 동일한 id를 가짐 >>> >>> # 이제 a를 증가 >>> a += 1 >>> id(a) 1919375104 >>> id(b) 1919375088 >>> id(c) 1919375088
위 결과에서 알 수 있듯이, 처음에는 a, b, c 세 이름이 모두 하나의 객체(id: 1919375088)를 참조하고 있었습니다. 하지만 a를 증가시키면 a는 새로운 객체(id: 1919375104)에 재할당되는 반면, b와 c는 여전히 기존 객체(id: 1919375088)를 참조합니다. 이것이 Python의 이름 바인딩 방식을 잘 보여주는 예입니다.
++/--를 입력하면 어떻게 될까?
흥미롭게도 Python에서 ++ 또는 -- 표현식 자체는 문법 오류 없이 동작하는 것처럼 보일 수 있습니다.
>>> a = 1 >>> ++a 1 >>> --a 1
그러나 이것이 증감 연산자가 아니라는 점에 유의해야 합니다. Python은 ++a를 +(+a)로, --a를 -(-a)로 해석합니다. 즉, 단항 덧셈/뺄셈 연산자가 두 번 연속으로 적용된 것일 뿐입니다. 반면 a++나 a--처럼 피연산자 뒤에 연산자를 붙이는 형태는 SyntaxError가 발생합니다.
결론적으로, Python에서 값을 증가·감소시킬 때는 항상 a += 1, a -= 1 형태의 복합 할당 연산자를 사용하는 것이 올바른 방법입니다.