Python에서 리스트를 복사하는 방법에는 여러 가지가 있다. 리스트는 가변 데이터 타입이기 때문에, 리스트를 복사할 때는 원본 리스트와 복사본이 독립적으로 동작하도록 하는 것이 중요하다. 단순히 대입 연산자를 사용하면 리스트의 참조만 복사되기 때문에 원본과 복사본이 동일한 객체를 참조하게 된다. 따라서, 원본이나 복사본 중 하나를 변경하면 다른 쪽도 영향을 받는다. 이러한 문제를 피하기 위해 여러 가지 리스트 복사 방법을 사용한다.
단순히 대입 연산자를 사용하여 리스트를 복사하면 원본과 복사본이 동일한 객체를 참조하게 된다. 이를 확인하기 위한 예제이다.
original_list = [1, 2, 3, 4, 5]
copied_list = original_list
# 복사본을 변경하면
copied_list.append(6)
# 원본도 변경된다
print("Original List:", original_list)
# 출력: Original List: [1, 2, 3, 4, 5, 6]
print("Copied List:", copied_list)
# 출력: Copied List: [1, 2, 3, 4, 5, 6]
위의 예제에서 copied_list
는 단순히 original_list
의 참조를 가져온다. 따라서 copied_list
를 변경하면 original_list
도 함께 변경된다. 이 문제를 피하기 위해 다양한 리스트 복사 방법이 필요하다.
리스트 슬라이싱을 사용하여 리스트를 복사할 수 있다. 이 방법은 간단하고 직관적이다.
original_list = [1, 2, 3, 4, 5]
copied_list = original_list[:]
print(copied_list)
# 출력: [1, 2, 3, 4, 5]
슬라이싱을 사용한 리스트 복사는 얕은 복사(Shallow Copy)로, 리스트 내부의 객체는 원본 리스트와 동일한 객체를 참조한다.
주의사항: 슬라이싱을 사용하여 리스트를 복사할 때, 리스트 내부에 중첩된 리스트나 가변 객체가 있을 경우, 이러한 내부 객체는 원본 리스트와 복사본 리스트가 동일한 객체를 참조하게 된다. 따라서, 내부 객체를 변경하면 원본 리스트도 영향을 받는다.
original_list = [[1, 2], [3, 4], [5, 6]]
copied_list = original_list[:]
# 복사본의 내부 객체 변경
copied_list[0][0] = 99
print("Original List:", original_list)
# 출력: Original List: [[99, 2], [3, 4], [5, 6]]
print("Copied List:", copied_list)
# 출력: Copied List: [[99, 2], [3, 4], [5, 6]]
위의 예제에서 copied_list[0][0]
를 변경하면 original_list[0][0]
도 변경되는 것을 볼 수 있다. 이는 얕은 복사로 인해 원본 리스트와 복사본 리스트가 동일한 내부 객체를 참조하기 때문이다.
리스트 구조(요소 추가, 제거, 교체)를 변경하는 것은 원본 리스트에 영향을 미치지 않는다.
copy()
메서드를 이용한 리스트 복사리스트의 copy()
메서드를 사용하면 리스트를 쉽게 복사할 수 있다. 이 역시 얕은 복사이다.
original_list = [1, 2, 3, 4, 5]
copied_list = original_list.copy()
print(copied_list)
# 출력: [1, 2, 3, 4, 5]
list()
함수를 이용한 리스트 복사list()
함수를 사용하여 리스트를 복사할 수도 있다. 이 방법은 리스트를 새롭게 생성하여 복사하는 방식이다.
original_list = [1, 2, 3, 4, 5]
copied_list = list(original_list)
print(copied_list)
# 출력: [1, 2, 3, 4, 5]
copy
모듈의 copy()
함수를 이용한 리스트 복사Python의 copy
모듈에는 얕은 복사를 수행하는 copy()
함수가 있다.
import copy
original_list = [1, 2, 3, 4, 5]
copied_list = copy.copy(original_list)
print(copied_list)
# 출력: [1, 2, 3, 4, 5]
copy
모듈의 deepcopy()
함수를 이용한 리스트 복사copy
모듈의 deepcopy()
함수는 리스트 내부의 모든 객체까지 새롭게 복사하는 깊은 복사(Deep Copy)를 수행한다. 중첩된 리스트를 복사할 때 유용하다.
import copy
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
copied_list = copy.deepcopy(original_list)
print(copied_list)
# 출력: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
깊은 복사를 사용하면 복사본과 원본이 완전히 독립적으로 동작하므로, 한쪽에서 변경이 발생해도 다른 쪽에 영향을 미치지 않는다.
리스트 컴프리헨션을 사용하여 리스트를 복사할 수 있다. 이 방법은 특히 리스트의 일부를 선택하여 복사할 때 유용하다.
original_list = [1, 2, 3, 4, 5]
copied_list = [item for item in original_list]
print(copied_list)
# 출력: [1, 2, 3, 4, 5]
Python에서 리스트를 복사하는 여러 가지 방법을 살펴보았다. 슬라이싱, copy()
메서드, list()
함수, copy
모듈의 copy()
및 deepcopy()
, 리스트 컴프리헨션 등의 방법을 사용하여 리스트를 복사할 수 있다. 단순 대입 연산자를 사용하면 원본과 복사본이 동일한 객체를 참조하게 되므로, 독립적으로 동작하는 복사본을 만들기 위해서는 위의 방법들을 사용해야 한다. 얕은 복사와 깊은 복사의 차이를 이해하고, 상황에 맞는 복사 방법을 선택하여 사용하면 된다. 이를 통해 리스트 데이터를 효율적으로 관리하고, 원본 데이터와 복사본 간의 독립성을 유지할 수 있다.