Python

리스트 복사 vs 리스트 변수 복사, 얕은 복사 vs 깊은 복사

JEO96 2022. 11. 15. 12:11
반응형

 

 

 python은 변수에 int, str, list 등을 변수에 넣을 때 객체를 가르키는 주소를 저장하는 특징을 가지고 있다. 그래서 변수에 자료형을 선언하지 않아도 쉽게 저장할 수 있는 장점을 가지고 있으나 계산할 때는 속도가 느려지는 단점이 있다.

 

이번 글에는 list를 다룰때 값을 복사하려 했으나 별칭을 만들게 되는 경우를 정리한다.

a_list = [2, 5, 10]
b_list = a_list

b_list.append(100)
a_list.append(200)
b_list.append(1)
print(a_list)		# [2, 5, 10, 100, 200, 1] 출력

위와 같이 리스트의 변수를 직접 변수로 받는 경우 새로운 list가 아닌 list의 별칭을 가지게 된다. 1차원 list를 간단하게 값 복사를 하는 방법은 슬라이싱을 사용하면 된다.

a_list = [2, 5, 10]
b_list = a_list[:]

 

2차원 list에서 1차원 list와 같이 슬라이싱을 이용하여 값을 받게 되면 얕은 복사가 발생하게 된다.

a_list = [1, 2, [5, 10]]
b_list = a_list[:]

b_list[0] = 0
b_list[1] = 0
b_list[2][0] = 0
b_list[2][1] = 0

print(a_list)		# [1, 2, [0, 0]]

깊은 복사를 하기위해서는 copy 패키지를 import 한후 copy.deepcopy 함수를 사용하면 된다.

import copy

a_list = [1, 2, [5, 10]]
b_list = copy.deepcopy(a_list)

 

반응형

'Python' 카테고리의 다른 글

정규표현식(2) [Python]  (0) 2022.11.17
정규표현식(1) [Python]  (0) 2022.11.16
str 불리언(is) 메서드[Python]  (0) 2022.11.11
set(세트)[Python]  (0) 2022.11.11
같은 폴더에 들어있는 py파일 import하기  (0) 2022.06.16