프로그래밍 공부/Python

[Python] 리스트 복사 vs 리스트 변수 복사

hueco 2021. 8. 22.

 

 파이썬의 변수는 C++의 '값'보다 '참조'에 가깝다. 이 말의 뜻을 다음의 예시를 통해 확인해보자.

 

위의 코드는 1, 2, 3을 원소로 가지는 리스트 a_list를 생성하고, b_list에 a_list를 대입했다. 그리고 append() 함수를 사용해 b_list에 4, 5, 6의 값을 추가하고, print() 함수를 사용해 a_list와 b_list를 출력했다. 두 리스트 중 b_list에만 원소를 추가했는데 a_list의 값도 4, 5, 6이 들어가 있는 것을 확인할 수 있다.

 코드가 이렇게 동작한 이유는 대입 연산자를 사용해서 b_list에 a_list를 대입할 때 리스트의 값이 아닌 객체의 주소값을 대입했기 때문이다. a_list가 참조하고 있는 객체의 주소를 b_list에 대입해서 같은 객체를 참조하기 때문에 b_list만 변경한 것 처럼 보이지만 같은 결과가 나오는 것이다.

 

만약 리스트가 참조하고 있는 객체의 주소가 아닌 실제 값을 복사하고 싶다면 어떻게 해야될까?

첫 번째 방법은 슬라이싱을 이용한다. 

 

두 번째 방법은 copy() 메서드를 사용한다.(다차원 배열에서는 copy() 함수가 아닌 copy.deepcopy() 함수를 사용해야 한다.)

 

댓글