대입
- 변수를 복사했지만 참조한 곳이 동일하기 때문에 같은 변수를 가리킴
- 같은 곳을 참조하기 때문에, 복사한 배열을 수정하면 원본도 수정됨
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]]