Assignment (=)
a = [1, 2, 3]
b = a # 대입
b.append(4)
print(a)
print(b)
[1,2,3,4]
[1,2,3,4]
- 객체
a에 b라는 변수 이름만 하나 더 할당해서 연결하는 동작이다.
- 얕은 복사나 깊은 복사에 해당하지 않음
Shallow Copy
a = [[1, 2], [3, 4]]
b = a[:] # 슬라이싱으로 전체를 얕은 복사
b.append([5, 6])
print(a)
print(b)
b[0].append(7)
print(a)
print(b)
[[1, 2], [3, 4]]
[[1, 2], [3, 4], [5, 6]]
[[1, 2, 7], [3, 4]]
[[1, 2, 7], [3, 4], [5, 6]]
b는 a의 바깥 컨테이너만 새로운 객체로 복사하고, 내부 객체는 원본을 참조한다.
a --> [[1, 2], [3, 4]] [[1, 2], [3, 4]]
↕︎ ↕︎ → ↕︎ ↕︎
b --> [[1, 2], [3, 4]] [[1, 2], [3, 4], [5, 6]]
append
a[:] 대신 copy 모듈의 copy.copy(a) 사용 가능
[1, 2, 3]과 같은 단순 리스트에서는 얕은 복사를 해도 복사본이 원본에 영향을 주지 않는다.
(내부 요소가 int처럼 불변 객체일 경우 공유는 하지만 값을 수정할 수 없기 때문)
Deep Copy
import copy
a = [[1, 2], [3, 4]]
b = copy.deepcopy(a) # 깊은 복사
b[0].append(7)
print(a)
print(b)
[[1, 2], [3, 4]]
[[1, 2, 7], [3, 4]]
b는 a의 모든 계층을 새로운 객체로 복사한다.
Leave a comment