출력 결과는 다음과 같다.
s1: A string...with more stuff!
s2: A string.
s1에 새로운 값이 대입될 때 메모리의 값을 변경하는 것이 아니다. 완전히 새로운 문자열을 대입하는 개념이다. 하지만 s2는 여전히 기존 문자열 데이터를 참조하고 있다. 그렇기 때문에 s1과 s2는 이제 서로 다른 값을 가지게 되는 것이다.
하지만 리스트는 가변적이며, 메모리의 값을 직접 변경할 수 있다.
a_list = b_list = [10, 20]
a_list += [30, 40]
print('a_list:', a_list)
print('b_list:', b_list)
출력 결과는 다음과 같다.
a_list: [10, 20, 30, 40]
b_list: [10, 20, 30, 40]
이번 코드는 리스트의 값을 직접 변경하기 때문에 신규 리스트를 생성하여 변수에 다시 대입할 필요가 없다. a_list에 신규 리스트가 대입되지 않았기에 변수 b_list는 메모리의 동일한 데이터를 참조하고 있으며, a_list의 변경이 그대로 반영된다.3
3 역주 물론이다. 두 변수가 모두 동일한 객체를 참조하고 있기 때문이다. 굉장히 중요한 개념이니 꼭 기억해 두자.