TIL DAY 19-2 || Python Shallow Copy

TK·2021년 3월 11일
0

TIL

목록 보기
27/55

Why do we need Shallow Copy or Deep Copy?

알고리즘 문제를 풀다가 다음과 같은 상황을 마주했다.

>>> num_list = [1, 2, 3, 4, 5, 6]
>>> for n in num_list:
...     num_list.remove(n)
... 
>>> num_list
[2, 4, 6]

num_list 를 iterate 하면서 처음 요소부터 끝까지 지우면 num_list 가 빈 리스트가 될 줄 알았었다. 하지만 그렇지 않았다.

왜냐면 예를 들어보자.

n 이 1 일 때 num_list 의 1을 지우면 num_list 의 2 가 0번 인덱스로 이동한다.

그렇다면 두 번째 iteration 에서 n 의 값은
1 번째 인덱스인 3 을 가리키기 때문에
이미 0번 째 인덱스가 되어버린 2 를 삭제하는 것이 아니라 인덱스가 1 인 3을 삭제한다.

How to use Shallow Copy

>>> num_list = [1, 2, 3, 4, 5, 6]
>>> for n in num_list[:]:
...     num_list.remove(n)
... 
>>> num_list
[]
>>> 
  • list의 슬라이싱을 통한 새로운 값을 할당한다.
  • 슬라이싱을 통해서 값을 할당하면 해당 객체에 새로운 id가 부여되며, 서로 영향을 받지 않는다.

위 처럼 방법은 매우 간단하다. iterate 를 할 객체 자체를 새로운 리스트로 (num_list[:]) 카피해버리면 된다.

When to use Deep Copy

📒 Python 가변 객체와 불변 객체

쉽게 말하면 복합객체에서 껍데기 말고 내용물까지 변경할 때 사용한다. 자세한건 예전에 쓴 포스팅을 참고해보자.

profile
Backend Developer

0개의 댓글