작성
·
155
1
쓰는 곳이 있나요? 예시가 생각이 나지않네요.
assingment랑 비슷하면서 다르긴 하나.
assignment는 복사란 개념보단 직접 그 point한 메모리안의 값을 assign 한다는 의미로 받았고.
shallow copy 는 새로운 메모리 공간 안에 값들을 복사 하고자(reference value)하는 memory의 address를 point해서 reference 값을 가져온다는 의미로 이해했습니다.
shallow copy를 했을 때랑 assignment 했을 때랑 =, [:]말곤 차이를 잘 못느끼겠습니다. 다른 건 그냥 assign하는 memory address만 다르다로만 이해했습니다.
hard copy는 새로운 memory안에 복사 하고자 하는 값도 똑같이 복사한다는 걸로 이해했습니다.
답변 1
1
안녕하세요,
assignment는 새로운 객체가 생성되는 것이 아니라 동일한 객체에 대한 새로운 참조가 생성된다고 기억하시면 될 거 같고, shallow copy는 새로운 객체를 생성하지만, 원본 객체가 참조하는 객체들까지 복사하지는 않습니다. 대신 원본 객체 내의 객체에 대한 참조를 새로운 객체에 삽입합니다.
얕은 복사는 컬렉션(리스트나 딕셔너리)의 복사본을 만들고, 새로운 컬렉션에 변경을 가하더라도 원본에는 영향을 미치지 않게 하고 싶을 때 유용합니다. 그러나 컬렉션 내에 있는 중첩 객체들은 깊이 복사할 필요가 없을 때 사용합니다.
예를 들자면...
리스트의 리스트가 있고, 외부 리스트를 복사하되 내부 리스트는 공유하고 싶을 때.
import copy
a = [[1, 2, 3], [4, 5, 6]]
b = copy.copy(a)
b[0][0] = 99
print(a) # output: [[99, 2, 3], [4, 5, 6]]
print(b) # output: [[99, 2, 3], [4, 5, 6]]
이 예제에서 a
와 b
는 내부 리스트를 공유합니다. b
를 통해 내부 리스트에 변경을 가하면 a
에도 반영됩니다. 이는 모든 객체를 재귀적으로 복사하여 완전히 독립적인 복사본을 생성하는 깊은 복사와는 다른 동작입니다.
도움이 되셨나요?