list 복사
코딩테스트를 풀던 중, a라는 리스트의 값을 변경하였는데 b라는 리스트의 값 또한 변하는 것을 확인하였다. 이것 때문에 30분 동안 머리가 너무 아팠는데 !! 확인해보니 a와 b라는 리스트가 같은 객체를 참조하고 있어서라고 하였다. 이런 적은 처음이라 앞으로도 실수하지 않기 위해 확실히 정리하고자 한다.
👉 리스트 복사
1
2
| list1 = [0, 0]
list2 = list1 #여기서 문제 !
|
- 위의 코드를 쓴 대부분의 사람들은 list2라는 변수에 list1과 똑같은 값을 대입하고 싶어서 작성했을 것이다. 이를 출력하여 확인해보면 결과는 의도에 맞게 나온다.
💙 복사 코드
- 그런데, 문제는 id값을 출력했을 때 둘이 같은 주소 값이 나온다는 것이다!!
💙 주소 확인
- 결론적으로는 list2를 변경하면, 같은 주소 값을 가지고 있는 list1도 변경되는 것이다.
👉 내가 실수한 부분
1
2
3
4
5
| test = [0, 0]
start = [1, 2]
test[0] = start[0]
test[1] = start[1]
id(test[0]), id(start[0]) #(140710059238184, 140710059238184) 같은 주소!!
|
사실 위의 리스트 복사와 같은 부분은 개념을 공부하면서 누구나 한 번쯤 보고 지나쳤을 것이다. 내가 실수한 부분은 위의 코드와 같다. 값을 저장해야 된다는 생각으로 test[0] 저장공간에 start[0]번쨰 값을 저장하는 코드를 작성하였다. 그런데, 위의 코드를 작성하면 test[0]과 start[0]이 같은 주소를 가리키는 것을 알 수 있다.
👉 리스트의 값만 복사하고 싶다면?
- 이때는 리스트의 복사본을 변수에 저장해주면 된다. 방법은 여러가지이다. 하나씩 알아보자
1. copy() 함수
1
2
| list1 = [0, 0]
list2 = list.copy() #복사본이 저장된다.
|
2. 인덱스 슬라이싱
1
2
| list1 = [0, 0]
list2 = list1[:] #새로운 객체
|