Python

[Python] 얕은복사, 깊은복사(shallow copy, deep copy)

끄적거리는수달 2025. 4. 11. 16:43

<얕은복사(shallow copy)>

a = [1,3,5]
b = a

print(b)

#[1,2,3]
#잘 복사가 된듯


a.append(7)

print(b)
#[1,3,5,7]
#배열a에 추가했는데 왜 배열b에 추가가 된것이여? 이게 머선일이고?

 

우리가 가끔 코딩테스트를 연습하다보면 만나는 실수다.

얕은복사를 했기 때문에 의도와 다른 저런 참사가 난다.

 

얕은복사를 할 경우 a,b의 두 변수는 같은 주소를 참조하고있기 때문이다.

독립적으로 사용하기위한 복사를 하려면 깊은복사를 해줘야한다

 

<깊은복사(deep copy)>

import copy

a = [1,3,5]
b = copy.deepcopy(a)

a.append(7)

print(b)

#[1,3,5]
#이젠 온전하게 b가 출력된다!

 

좀 귀찮지만 copy를 import해서 사용해야한다.

이젠 변수 a,b 를 독립적으로 사용할 수있다.

 

하지만 위의 방법은 막상 갑작스럽게 사용하려면 머리속에서 지워졌을 확률 97%

 

<야매깊은복사>

a = [1,3,5]
b = []
for i in a:
	b.append(i)
    
a.append(7)
print(b)

#[1,3,5]
#이지하구만

잘 된다.

우리가 잘 아는 for 문으로 그냥 일일히 넣어서 복사해주면된다.

deep copy방법 까먹었다고 import copy한다음 어? 나 까먹었다 이문제 못풀겠는데? 하지말고

이런식이라도 꾸역꾸역 해결하는 방법이있으니 포기하지 마시길.