Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 리스트 복사 방법 4가지: copy(), 슬라이싱, list(), 리스트 컴프리헨션

파이썬에서 리스트를 복사하려면 copy() 메서드, 슬라이싱(slicing), list() 함수, 리스트 컴프리헨션(list comprehension)을 사용할 수 있습니다. 그중 copy() 메서드가 가장 직관적이고 간단한 방법입니다.

파이썬으로 작업하다 보면 기존 리스트의 복사본이 필요한 상황이 자주 발생합니다. 예를 들어, 작년 학생 명단을 바탕으로 새 학기 명단을 생성하는 프로그램을 만든다면, 원본 명단은 그대로 보존한 채 새로운 리스트를 만들어야겠죠.

파이썬에서 리스트를 복사하는 4가지 방법

파이썬에서 리스트를 복사하는 대표적인 방법은 다음과 같습니다.

  • 슬라이싱 문법 사용
  • copy() 메서드 사용
  • list() 함수 사용
  • 리스트 컴프리헨션 선언

이 글에서는 예제 코드와 함께 각 방법을 자세히 살펴보겠습니다.

참고로 등호(=)를 사용해도 리스트를 복사할 수 있는 것처럼 보이지만, 이 경우 새 리스트는 기존 리스트와 동일한 객체를 참조하게 됩니다. 즉, 새 리스트를 수정하면 원본 리스트까지 함께 변경되므로 주의해야 합니다.

copy() 메서드로 리스트 복사하기

copy() 메서드는 기존 리스트의 얕은 복사본(shallow copy)을 생성하는 파이썬 내장 메서드입니다. 리스트 객체 뒤에 붙여 사용하며, 별도의 매개변수를 받지 않고 새로운 리스트를 반환합니다.

copy() 메서드를 사용하면 원본 리스트는 그대로 유지한 채 리스트를 복제할 수 있습니다. 기본 문법은 다음과 같습니다.

new_list = old_list.copy()

copy() 메서드 예제

과일 가게를 운영한다고 가정해 보겠습니다. 여름철 제철 과일을 반영하기 위해 기존 판매 목록을 업데이트하고 싶지만, 지난 시즌 판매 기록은 따로 보관해 두고 싶습니다. 이럴 때 copy() 메서드로 리스트를 복제하면 됩니다.

spring_fruits = ['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

summer_fruits = spring_fruits.copy()

print(summer_fruits)

실행 결과:

['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

코드 첫 번째 줄에서는 봄철에 판매한 과일을 담은 spring_fruits 변수를 정의했습니다. 그다음 copy() 메서드를 호출해 spring_fruits의 모든 항목을 포함하는 새로운 리스트 summer_fruits를 만들고, 마지막으로 print() 함수로 출력했습니다. 결과를 보면 summer_fruits 리스트가 원본인 spring_fruits와 동일한 값을 가지는 것을 확인할 수 있습니다.

이제 복사본이 생겼으니, append()remove() 같은 메서드를 사용해 여름 시즌 판매 목록에 맞게 자유롭게 수정할 수 있습니다. 원본 리스트는 전혀 영향을 받지 않습니다.

슬라이싱으로 리스트 복사하기

슬라이싱은 파이썬에서 리스트의 항목을 추출하는 기법입니다. 개별 항목, 여러 항목, 또는 리스트 전체를 가져올 수 있으며, 전체를 추출하면 사실상 리스트 복사와 같은 효과를 냅니다.

앞선 과일 가게 예제를 슬라이싱 방식으로 다시 구현해 보겠습니다.

spring_fruits = ['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

summer_fruits = spring_fruits[:]

print(summer_fruits)

실행 결과:

['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

copy() 메서드 예제와 코드 구조가 거의 비슷하지만, 결정적인 차이는 copy() 대신 [:]라는 슬라이싱 표기를 사용했다는 점입니다. 대괄호 안에 콜론만 넣으면 시작 인덱스부터 끝 인덱스까지, 즉 리스트의 모든 요소가 새 리스트로 복사됩니다.

list() 함수로 리스트 복사하기

list() 함수를 사용해서도 리스트를 복사할 수 있습니다. list() 함수는 하나의 매개변수, 즉 리스트로 변환하고자 하는 객체를 받습니다. 문법은 다음과 같습니다.

list(list_name)

역시 과일 가게 예제로 살펴보겠습니다.

spring_fruits = ['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

summer_fruits = list(spring_fruits)

print(summer_fruits)

실행 결과:

['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

list(spring_fruits)의 반환값을 summer_fruits에 할당하면 spring_fruits의 복사본이 생성되어 저장됩니다. 이후 print() 함수로 새 리스트를 출력하면 원본과 동일한 값이 담긴 것을 확인할 수 있습니다.

리스트 컴프리헨션으로 리스트 복사하기

리스트 컴프리헨션은 파이썬에서 리스트를 간결하게 생성하는 문법으로, for…in 표현식을 사용합니다. 기존 리스트의 모든 항목을 순회하면서 그 값들로 새 리스트를 채우는 방식으로 동작합니다.

기본 문법은 다음과 같습니다.

new_list = [i for i in old_list]

과일 가게 예제에 적용하면 다음과 같습니다.

spring_fruits = ['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

summer_fruits = [i for i in spring_fruits]

print(summer_fruits)

실행 결과:

['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']

리스트 컴프리헨션이 spring_fruits의 모든 값을 순회하며 새로운 summer_fruits 리스트를 만들었습니다. 이 방법은 단순 복사뿐 아니라 복사하면서 특정 조건을 걸거나 값을 변형할 수 있어 활용 범위가 넓다는 장점이 있습니다.

마무리

이번 글에서는 파이썬에서 리스트를 복사하는 네 가지 방법, 즉 copy() 메서드, 슬라이싱([:]), list() 함수, 리스트 컴프리헨션을 살펴보았습니다.

네 가지 방법 모두 원본 리스트를 변경하지 않고 복사본을 만든다는 점에서 결과는 같지만, 코드의 의도를 드러내는 관점에서는 copy() 메서드가 가장 명확합니다. 반면 조건 필터링이나 값 변환이 필요하다면 리스트 컴프리헨션이 유용합니다. 상황에 맞는 방법을 선택해 사용해 보시기 바랍니다.