-
[Python] +와 += 차이점언어/파이썬 & 장고 2019. 1. 27. 18:23
파이썬에서 어떤 값을 더할 때 +를 사용하여 새로운 변수에 결과값을 담을 수도 있고 기존에 사용하던 변수에 +=로 값을 대체할 때가 있습니다. 더 나아가 각 리스트를 합칠 때도 사용됩니다. 아래는 리스트를 합치는 예시입니다.
a = [1,2] b = [3,4] c = a+b print(c) # [1, 2, 3, 4] a += b print(a) # [1, 2, 3, 4]
위 결과만 봤을 때 +와 +=의 차이가 없는 것처럼 확인됩니다. 그러나 아래 예시를 보면 똑같다 라는 가정이 틀렸다는 것을 볼 수 있습니다.
a = [1,2] b = (3,4) c = a+b Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "tuple") to list a += b print(a) # [1, 2, 3, 4]
리스트와 튜플로 선언 후 + 연산자로 결과를 새로운 변수 c에 담으려 하면 에러를 반환하는 반면, += 연산자를 사용하여 a 변수에 결과를 반영하면 의도한대로 합쳐진 리스트가 나오는 것을 볼 수 있습니다.
여기서 + 는 __add__ 함수를 호출하고 +=는 __iadd__ 함수를 호출하게 됩니다.
여기서 + 연산자는 대칭입니다. 대칭이라는 의미는 a+b와 b+a는 항상 같은 결과를 가져와야 합니다. 위와 같이 타입이 다른 경우, 연산자의 좌변과 우변의 선언 순서에 따라 타입이 변경되기 때문에 오류를 발생시킵니다.
반면 += 연산자는 비대칭입니다. 선언문 왼쪽의 변수타입에 의해 결정이 됩니다. 따라서 a+=b는 a 타입을 유지하게 됩니다.
만약 b+=a 일 경우면 아래와 같은 결과를 반환합니다.
a = [1,2] b = (3,4) b += a Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate tuple (not "list") to tuple
이처럼 +와 +=는 비슷해 보이지만 동작하는 방식이 다르므로 사용할 때 유의하여 사용해야 합니다.