- 우리가 a_list 라는 새로운 리스트를 만들면 파이썬은 컴퓨터 메모리에 리스트를 저장한 후에, 리스트의 주소를 alist 변수에 저장한다.
- 즉, a_list는 리스트의 모든 원소를 담고있는 것이 아니라, 리스트의 원 소들이 있는 곳의 저장 위치 만을 가지고 있는 것이다.
- a_list가 리스트 객체를 참조한다(reference)는 표현을 사용한다.
얕은 복사
a_list = ['Kim', 'Park', 'Lee', 'Hong']
b_list = alist
b_list[1] = 'Choi'
print(a_list)
print(b_list)
print(id(a_list))
print(id(b_list))
- id() 함수를 통해서 메모리에 올라온 객체의 고유한 식별번호를 알아 낼 수 있다.
- 이를 통해 alist와 blist의 아이디를 조회해보면 두 객체의 아이디가 같다는 것을 알 수 있다. (= 두 변수는 같은 리스트 객체를 참조한다.)
- 따라서 복사한 리스트의 값을 변경하면 원본 리스트의 값도 같이 변경된다. (같은 주소를 참조하고 있기 때문에)
- 이것을 얕은 복사라고 한다.
깊은 복사 (리스트를 복제하여 새로운 리스트 만들기)
a_list = ['Kim', 'Park', 'Lee', 'Hong']
b_list = list(a_list)
print(id(a_list))
print(id(b_list))
b_list[1] = 'Choi'
print(b_list)
print(a_list)
- 만약 동일한 내용을 가지는 새로운 리스트를 생성하고 싶은 경우: list(), slicing
- 그렇게 하면 원래 리스트의 복사본이 생성되며 b_list 이 복사본을 참조한다.
- 따라서 두 객체의 id는 다른 값을 가진다.
- 이것을 깊은 복사라고 한다.