파이썬은 모든 것이 객체다. 

리스트와 딕셔너리 자료형은 가변 객체이며 숫자와 문자는 불변 객체다.

 

 

변수에 값을 할당하는 행위는 값 객체를 잠조하는 것 과 같다

아래의 예를 보자

 

 

b라는 변수에 a를 할당한 다음,

b의 메모리 주소를 출력하니 a와 동일한 값이 나왔다.

변수 b는 a의 객체를 '참조'하는 것이다

 

 

 

변수 b가 객체 a를 참조하는 것이 아니라

객체를 복사 하려면(다른 메모리 주소를 얻으려면) 어떻게 해야 할까?

 

 

 

첫 번째 방법은 '[:]'를  활용하는 것이다.

 

 

변수 b에 'a[:]'를 할당하니, 

b의 메모리 주소가 a와 달라지는 것을 확인할 수 있다.

b가 객체 a를 '참조'하는 것이 아니라 '복사'한 것이다.

 

 

 

두 번째 방법은 'copy() 메서드'를 활용하는 법이다.

 

 

마찬가지로 copy() 메서드로 a 객체를 카피한 값을 b에 할당하자

b의 메모리 주소는 a와 달라진다.

 

 

 

 

마지막으로 복잡한 리스트에는 deepcopy() 메서드를 사용할 수 있다.

 

 

위 그림과 같이 중첩 리스트의 경우도

copy 모듈을 호출한 다음

deepcopy() 메서드를 통해 a 객체의 복사본을 변수 b에 할당할 수 있다.

 

 

 

특정 객체(a)를 새로운 변수(b)에 '복사'하지 않고, '참조'하게 되면

객체의 값(a)이 변할 때마다

참조된 값(b)이 따라 변하게 된다.

'참조'와 '복사'의 개념을 반드시 구분하여 사용해야 하는 이유다.

 

 

 

 

* 위 내용은 도서 파이썬 알고리즘 인터뷰(박상길, 책만)의 책을 참고하여 정리한 내용임

 

 

 

 

 

 

+ Recent posts