파이썬의 변수는 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() 함수를 사용해야 한다.)
'프로그래밍 공부 > Python' 카테고리의 다른 글
[Python] 정렬 함수에 대해서 (0) | 2022.08.27 |
---|---|
[Python] 합집합, 교집합, 차집합, 대칭 차집합 (0) | 2022.05.29 |
[Python] deque의 rotate() (0) | 2022.05.17 |
[Python] tuple을 원소로 가지는 리스트의 정렬 (0) | 2021.10.22 |
[Python] casefold()와 lower() (0) | 2021.08.17 |
댓글