2013-12-20 3 views
0

얕은 복사와 깊은 복사의 차이점은 무엇입니까? 파이썬 워드 프로세서 (http://docs.python.org/2/library/copy.html)에서 읽었습니다. 근본적으로 얕은 복사는 참조를 만드는 반면에 깊은 복사는 실제로 복사합니다. 그래서 나는 얕은 복사를 통해 목록을 만들었고 그 값들을 바꿨습니다. 그러나 변경 사항은 원본 목록에 반영되지 않았습니다. 그렇게 얕은 복사가 참조에서 작동한다면? 얕은 복사 및 깊은 복사

>>>li = [1,2,3,4] 
>>> x = copy(li) 
>>> x 
[1, 2, 3, 4] 
>>> x[0]=9 
>>> x 
[9, 2, 3, 4] 
>>> li 
[1, 2, 3, 4] 
+0

여기에서 설명을 볼 수 있습니다. http://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-shallow-copy – Vb407

답변

0

copy 목록의 사본을 만들지 만 그 요소를 복사하지 않습니다 (단지 기록을 위해, 나는 파이썬 2.7.5를 사용하고 있습니다). 새 목록에는 원래 목록의 요소에 대한 참조가 포함됩니다.

deepcopy은 모든 사본을 별도로 만듭니다.

은 참조 : 복사 생성자가 동일한 클래스의 이전에 생성 된 개체와 새로운 개체를 초기화하는 데 사용됩니다

import copy 

li = [[1], 2] 
x = copy.copy(li) 
x[0][0] = 2 
x[1] = 3 
print li 
print x 
0

. 기본적으로 컴파일러는 얕은 복사본을 작성했습니다. 동적 메모리 할당이 관련된 경우 두 개체가 힙의 동일한 메모리 위치를 가리킬 것이므로 동적 복사본을 포함하지 않는 경우 복사본이 잘 작동합니다. 따라서이 문제를 제거하기 위해 두 개체가 고유 한 특성 복사본을 갖도록 딥 복사본을 작성했습니다. 기억에. 완전한 예제와 설명으로 세부 사항을 읽으려면 difference between Shallow and Deep copy constructors에 대한이 기사의 부분을 볼 수 있습니다.