[TIL / Python] 얕은복사, 깊은 복사 ( 리스트를 함수 인자로 받을 때)

yujeongkwon·2022년 6월 29일
0

TIL

목록 보기
6/9

📌얕은 복사 : 쉽게 말해 해당 리스트의 "주소값"을 전달하는 것

새로운 메모리를 형성하지 않음. 값의 복사가 아닌 주소값의 복사를 통해 동일한 메모리를 가리킴.

li1 = [0,1,2]
li2 = li1

li2[0] = 500
print(li1) # 500

위 처럼 li2의 일부를 바꾸면 li1에도 영향이 간다.

📌깊은 복사 : 쉽게 말해 해당 리스트의 "값" 자체를 복사하는 것

즉 완전히 독립적인 메모리를 가진다.

li1 = [0,1,2]
li2 = li1

li2[0] = 500
print(li1) # 0

위 처럼 li2의 일부를 바꾸어도 li1에 영향이 없다

📌 보통 파이썬에서는 함수 인자로 리스트를 넘겨줄 때, 값으로 넘겨준느 것이 아닌, 리스트의 주소 값을 옮겨준다.

이를 해결하기 위해서는 깊은 복사를 사용해야 한다.

1차원의 리스트 상에서는 li2 = li1[:] 를 통해 깊은 복사가 가능하지만
2차원 리스트 상에서는 해당하지 않는다 따라서

✅ import copy

li2 = copy.deepcopy(li1) 를 통해 깊은 복사를 이끌어 낼 수 있다.

profile
인생 살자.

0개의 댓글