정의 — 제자리 연산(in-place operation)이란 복사본을 새로 만들지 않고 주어진 선형 대수 객체(벡터, 행렬, 텐서 등)의 내용을 직접 변경하는 연산을 말합니다. 그리고 이러한 연산을 수행하는 데 사용되는 연산자를 제자리 연산자(in-place operator)라고 부릅니다.
대표적인 예로 a += b는 a = operator.iadd(a, b)와 동일하게 동작합니다.
파이썬의 operator 모듈에는 제자리 연산을 수행하는 다양한 함수들이 제공됩니다. 아래에서 주요 함수들을 하나씩 살펴보겠습니다.
iadd()
현재 값에 다른 값을 더해 할당하는 함수입니다. 즉, x += y 연산을 수행합니다. 문자열이나 숫자의 경우 새로운 값이 할당되는 방식으로 처리됩니다.
예제
import operator
a = operator.iadd(1, 3)
print("덧셈 결과 : ", end="")
print(a)출력
덧셈 결과 : 4
isub()
현재 값에서 다른 값을 빼서 할당하는 함수입니다. 즉, x -= y 연산을 수행합니다.
예제
a = operator.isub(8, 6)
print("뺄셈 결과 : ", end="")
print(a)출력
뺄셈 결과 : 2
imul()
현재 값에 다른 값을 곱해서 할당하는 함수입니다. 즉, x *= y 연산을 수행합니다.
예제
a = operator.imul(8, 6)
print("곱셈 결과 : ", end="")
print(a)출력
곱셈 결과 : 48
itruediv()
현재 값을 다른 값으로 나누어 할당하는 함수입니다. 즉, x /= y 연산을 수행하며, 항상 실수(float) 형태의 결과를 반환합니다.
예제
a = operator.itruediv(54, 6)
print("나눗셈 결과 : ", end="")
print(a)출력
나눗셈 결과 : 9.0
imod()
현재 값을 다른 값으로 나눈 나머지를 할당하는 함수입니다. 즉, x %= y 연산을 수행합니다.
예제
a = operator.imod(10, 5)
print("나머지 연산 결과 : ", end="")
print(a)출력
나머지 연산 결과 : 0
iconcat()
두 문자열(또는 시퀀스)을 이어 붙이는 함수입니다. 즉, a += b 형태의 문자열 연결 연산을 수행합니다.
예제
a = "jupyter"
b = "notebook"
t = operator.iconcat(a, b)
print("연결 후 결과 : ", end="")
print(t)출력
연결 후 결과 : jupyternotebook
마무리
제자리 연산자는 코드를 간결하게 만들어주며, 특히 NumPy 배열이나 텐서처럼 큰 데이터를 다룰 때 불필요한 복사를 줄여 메모리와 성능 측면에서 유리합니다. 다만 리스트, 넘파이 배열 같은 가변(mutable) 객체에서만 진정한 '제자리' 수정이 일어난다는 점과, 정수·문자열 같은 불변(immutable) 객체에서는 단순히 새 객체가 할당된다는 점을 기억해두면 좋습니다.