a = 5
a += 1
a # a의 경우, 현재 int형으로 원시자료형이다. 즉, 불변타입! 따라서, 불변형의 경우 수정이 필요할 때 새로운 객체를 생성한다.
- 기존 객체를 수정 시도하고, 불가능할 시 새로운 객체 생성 (계산 전, 이전 값이 별도로 필요하지 않다면 이를 사용함
장점 : 추가 메모리 할당 없이 기존 할당된 메모리를 그대로 사용하므로 메모리 효율화와 속도 향상 기대가 가능해진다.
(특히, 배열의 크기가 클수록 할당에 시간이 오래 소요되므로 더 큰 차이가 발생한다.)
예시 : +=, -=, *=, /=
a = 5
a = a+1
a # 새로운 객체 생성
- 명시적으로 새로운 객체 생성
a = 10 # int는 불변 타입
b = a # a와 b는 같은 메모리 주소를 가르침
a += 1 # a는 불변 타입 -> 수정이 필요할 경우에 새로운 객체 생성해서 할당
a,b, a is b # a가 새로 할당되었기 떄문에 a is not b!
(11, 10, False)
a = [1,2,3] # List는 가변 타입
b = a # a, b는 같은 메모리 주소를 가르침
a += [4] # a는 가변 타입 -> 원 객체를 수정 (in-place)
a, b, a is b # a의 메모리 주소는 변함 없음!
([1,2,3,4], [1,2,3,4], True)
a = a + [5] # out-place 연산
a, b, a is b
([1,2,3,4,5], [1,2,3,4], False)