Algorithm

python) deepcopy와 [:](슬라이싱) 차이

주코식딩 2022. 5. 21. 20:38

copy 모듈의 deepcopy는 리스트가 아닌 객체를 copy할때 유용한 것으로 알고있다.

 

하지만 오늘 들은 얘기는 조금 충격적이였다.

바로 2차원 배열에는 슬라이싱을 사용시 값이 제대로 복사가 되지 않는다는 점..!

a = [  [1,2], [3,4]  ]

b = a[:]

배열 a는 위와 같이 슬라이싱을 하면 가장 밖에 있는 배열만 복사하고 안 쪽에 있는 배열들은 복사가 되지 않는다.

그 이유는 어렵지 않게 추측할 수 있다.

 

배열안에 배열을 넣기위해 주소값을 두 번 참조했기 때문이다.

그러므로 슬라이싱을 이용해 제대로 copy하려면 다음과 같이 사용해야한다.

 

b = [ ]

for i in range(len(a)):

    b.append(i[:])

 

매우 귀찮은 과정이므로 그냥 deepcopy를 사용하도록 하자.

'Algorithm' 카테고리의 다른 글

python) 정렬에 lambda함수 활용하기  (0) 2022.05.23
프로그래머스) 괄호 변환  (0) 2022.05.22
LeetCode) subsets  (0) 2022.05.21
백준) 단지번호붙이기  (0) 2022.05.19
LeetCode) lengthOfLongestSubstring  (0) 2022.05.18