본문 바로가기
5-1. 파이썬 제공 기본 자료구조/리스트

[파이썬] 리스트 할당과 복사 (2차원 배열에서는 왜 안될까)

by 만다린망고 2021. 11. 9.
반응형

아래와 같이 a라는 리스트를 정의해봅시다. 

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


b에 a를 할당합니다. 

>>> b=a
>>> b
[1, 2, 3]


b를 수정하면 a가 바뀔까요. 바뀌지 않을까요? 한번 수정해봅시다. 

>>> b[0]=2
>>> a
[2, 2, 3]


a도 함께 바뀝니다. 

 

copy 메소드

만약 b를 a와 같게 정의하고, 이후에는 b만 독립적으로 사용하려면 어떻게 해야 할까요? copy 메소드를 사용하면 됩니다. copy 메소드로 b를 정의해봅시다. 

>>> a=[1,2,3]
>>> b=a.copy()
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]


b의 원소를 바꿔봅시다. 

>>> b[0]=50
>>> a
[1, 2, 3]
>>> b
[50, 2, 3]


b만 변경되었습니다. copy 메소드에는 한계가 있습니다. 2차원 이상의 리스트에서는 작동하지 않게 됩니다. 1중 중첩까지만 복사하는 것이기 때문에 2중으로 중첨되어 있는 곳의 원소는 복사되지 않고 여전히 연결된 채로 남아있습니다. 이때 사용하는 함수가 deepcopy 함수입니다. 사용방법은 1차원리스트에서 알아봅시다. 

 

deepcopy 함수

copy 모듈의 deepcopy 함수를 사용하면 됩니다. copy 모듈을 불러오고, deepcopy 함수로 b를 정의해봅시다. 

>>> import copy
>>> a=[1,2,3]
>>> b=copy.deepcopy(a)


b의 원소를 변경하고 확인해봅시다. b만 바뀐 것을 알 수 있습니다. 

>>> b[0]=100
>>> a
[1, 2, 3]
>>> b
[100, 2, 3]

 

반응형

댓글