[Python] List 복사

Hye·2023년 2월 22일

대입

  • 변수를 복사했지만 참조한 곳이 동일하기 때문에 같은 변수를 가리킴
  • 같은 곳을 참조하기 때문에, 복사한 배열을 수정하면 원본도 수정됨
arr = [1,2,3]
arr2 = arr # 복사

arr2.append(4)
arr = [1,2,3,4]
arr2 = [1,2,3,4]

얕은 복사 (shallow copy)

  • 새로운 주소를 할당받으므로 서로 영향 X
  • BUT 중첩 리스트를 만드는 경우 변수간 독립성이 보장되지 않음 !!

1️⃣ 슬라이싱 [:] 이용

arr = [1,2,3]
arr2 = arr[:] # 복사

2️⃣ copy()

arr = [1,2,3]
arr2 = arr.copy() # 복사

3️⃣ List 연산

arr = [1,2,3]
arr2 = [] + arr # 복사

4️⃣ list()

arr = [1,2,3]
arr2 = list(arr) # 복사

한계

  • List 안에 List가 있는 경우 내부의 List가 같은 주소를 바라봄
  • 내부 List 값을 변경하는 경우 원본 List의 내부 List도 변경됨
>>> arr = [[1,2], [3,4]]
>>> arr2 = arr[:]

>>> id(arr)
4395624328 #다름
>>> id(arr2)
4396179592 #다름
>>> id(arr[0])
4396116040 #같음
>>> id(arr2[0])
4396116040 #같음

>>> arr[1].append(5)
>>> print(arr)
[[1,2], [3,4,5]]
>>> print(arr2)
[[1,2], [3,4,5]]

깊은 복사 (deep copy)

  • 내부 객체들까지 모두 새롭게 복사됨
  • copy.deepcopy() 사용
import copy

>>> arr = [[1,2], [3,4]]
>>> arr2 = copy.deepcopy(arr)

>>> arr[1].append(5)
>>> print(arr)
[[1,2], [3,4,5]]
>>> print(arr2)
[[1,2], [3,4]]
profile
공부중 📚

0개의 댓글