table = copy ?
table = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
copy = table
위 코드는 어떻게 동작하게 될까?
`copy = table`라는 코드는 실제로 2차원 배열 `table`의 참조를 `copy`라는 변수에 할당하는 것이다.
새로운 2차원 배열을 생성하는 것이 아니라, `table`과 `copy`가 같은 메모리 주소를 참조하게 된다.
즉, 하나의 리스트를 두 개의 이름으로 가리키는 것이다.
이는 파이썬에서 객체의 참조를 다룰 때 일반적인 동작 방식이다.
table = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
copy = table
table[0][0] = 100
print(copy) # [[100, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
Shallow copy (얕은 복사)
얕은 복사는 새로운 객체를 만들지만, 원래 객체의 요소들을 새로운 객체에 그대로 복사한다.
하지만, 내부에 있는 객체는 동일한 객체를 참조한다. 다시 말해, 복사된 객체와 원래 객체는 동일한 하위 객체를 참조한다.
파이썬에서는 copy()
메서드나 copy
모듈의 copy()
함수를 사용하여 Shallow copy를 수행할 수 있다.
import copy
original = [[1, 2, 3], [4, 5, 6]]
shallow_copy = copy.copy(original)
# 원본 리스트의 요소 변경
original[0][0] = 100
print(shallow_copy) # 출력: [[100, 2, 3], [4, 5, 6]]
이 예제에서 shallow_copy
는 original
의 복사본이지만,
내부 리스트는 동일한 객체를 참조하고 있으므로 original
의 변경이 shallow_copy
에도 영향을 미칩니다.
Deep Copy (깊은 복사)
깊은 복사는 새로운 객체를 만들고 그 객체 내의 모든 요소들도 재귀적으로 새로운 객체로 복사한다.
즉, 복사된 객체와 원래 객체는 완전히 독립적으로 존재한다.
파이썬에서는 copy
모듈의 deepcopy()
함수를 사용하여 깊은 복사를 수행할 수 있다.
import copy
original = [[1, 2, 3], [4, 5, 6]]
deep_copy = copy.deepcopy(original)
# 원본 리스트의 요소 변경
original[0][0] = 100
print(deep_copy) # 출력: [[1, 2, 3], [4, 5, 6]]
이 예제에서 deep_copy
는 original
의 복사본이며, 내부 리스트도 완전히 새로운 객체로 복사되었기 때문에
original
의 변경이 deep_copy
에는 영향을 미치지 않는다.
table = copy ?
table = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
copy = table
위 코드는 어떻게 동작하게 될까?
`copy = table`라는 코드는 실제로 2차원 배열 `table`의 참조를 `copy`라는 변수에 할당하는 것이다.
새로운 2차원 배열을 생성하는 것이 아니라, `table`과 `copy`가 같은 메모리 주소를 참조하게 된다.
즉, 하나의 리스트를 두 개의 이름으로 가리키는 것이다.
이는 파이썬에서 객체의 참조를 다룰 때 일반적인 동작 방식이다.
table = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
copy = table
table[0][0] = 100
print(copy) # [[100, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
Shallow copy (얕은 복사)
얕은 복사는 새로운 객체를 만들지만, 원래 객체의 요소들을 새로운 객체에 그대로 복사한다.
하지만, 내부에 있는 객체는 동일한 객체를 참조한다. 다시 말해, 복사된 객체와 원래 객체는 동일한 하위 객체를 참조한다.
파이썬에서는 copy()
메서드나 copy
모듈의 copy()
함수를 사용하여 Shallow copy를 수행할 수 있다.
import copy
original = [[1, 2, 3], [4, 5, 6]]
shallow_copy = copy.copy(original)
# 원본 리스트의 요소 변경
original[0][0] = 100
print(shallow_copy) # 출력: [[100, 2, 3], [4, 5, 6]]
이 예제에서 shallow_copy
는 original
의 복사본이지만,
내부 리스트는 동일한 객체를 참조하고 있으므로 original
의 변경이 shallow_copy
에도 영향을 미칩니다.
Deep Copy (깊은 복사)
깊은 복사는 새로운 객체를 만들고 그 객체 내의 모든 요소들도 재귀적으로 새로운 객체로 복사한다.
즉, 복사된 객체와 원래 객체는 완전히 독립적으로 존재한다.
파이썬에서는 copy
모듈의 deepcopy()
함수를 사용하여 깊은 복사를 수행할 수 있다.
import copy
original = [[1, 2, 3], [4, 5, 6]]
deep_copy = copy.deepcopy(original)
# 원본 리스트의 요소 변경
original[0][0] = 100
print(deep_copy) # 출력: [[1, 2, 3], [4, 5, 6]]
이 예제에서 deep_copy
는 original
의 복사본이며, 내부 리스트도 완전히 새로운 객체로 복사되었기 때문에
original
의 변경이 deep_copy
에는 영향을 미치지 않는다.