소개
이 튜토리얼에서는,우리는 우리가 논의 얕은 사본에 대한 깊은 사본의 도움으로 예에서는 Python. 우리 커버의 정의 깊고 얕은 사본과 함께 그것의 구현 라이브러리가 들어를 평가하는 핵심 사이의 차이점을 두 종류의 복사본입니다.
에서는 프로그램의 많은 것을 우리가 쓰는 방법에 상관없이 기본적인은,그들이 우리가 끝까지 필요 복사하는 목록 또는 개체 중 하나에 대한 여러 가지 이유로,다음과 같 계산 효율입니다., 그렇게 할 수있는 두 가지 방법이 있습니다,중 깊은 사본을 만들거나 얕은 사본. 이 둘의 차이점을 논의하기 전에 먼저 깊고 얕은 사본이 정확히 무엇인지 이해합시다.
Python 의 Deep Copies
deep copy 는 고유 한 메모리 주소를 가진 전체 객체 또는 목록의 새롭고 별도의 복사본을 만듭니다. 이것이 의미하는 바는 객체/목록의 새 사본에서 변경 한 내용이 원래 사본에 반영되지 않는다는 것입니다. 이 프로세스는 먼저 새 목록 또는 개체를 만든 다음 요소를 원래 항목에서 새 항목으로 재귀 적으로 복사하여 발생합니다.,간단히 말하면 두 객체는 서로 완전히 독립적입니다. 이것은 C++,Java 및 C#과 같은 언어로 값을 전달하는 개념과 유사합니다.
딥 카피 예제
파이썬에서 딥 카피의 개념을 구현하려면 복사 모듈을 사용하겠습니다.
자 말로는 우리의 목록을 나열하라는result_A
포함하는 학년의 학생에서 3 과목에 대한 첫 번째 두 개의 년간의 학교,그리고 우리를 창조하려는 정확하게 비슷한 결과 목록에 대한 학생 B 니다., 우리는 마음만 먹으면 깊이의 복사본을result_A
목록,그리고 몇 가지 변화에서는 깊은 복사를 보여주기 위하여 나중에 학년의 학생 B.
예제 1:
에서 스크립트가 위의 우리가 사용하는deepcopy
에서 방법을copy
모듈을 복사 목록result_A
을result_B
. 다음으로,우리는 화면에 두 목록의 내용을 인쇄합니다.
출력:
, ], ]
당신이 볼 수 있듯이,목록은 동일합니다. 나중에이 기사에서 우리는 이것이 얕은 사본과 어떻게 다른지 살펴볼 것입니다.,
얕은 복사본에서는 파이썬
단순 복사본도 별도 새로운 객체 또는 목록은,하지만 그 대신에 복사하는 자식 요하는 새로운 객체,그것은 단순히 복사본을 참조하여 자신의 메모리 주소가 있습니다. 따라서 원래 객체를 변경하면 복사 된 객체에 반영되고 그 반대도 마찬가지입니다. 간단히 말하면,두 사본은 서로 종속되어 있습니다. 이것은 C++,C#및 Java 와 같은 프로그래밍 언어에서 참조로 전달하는 개념과 유사합니다.,
얕은 복사를 들어
이를 구현하기 위해서는 Python,우리가 사용하는copy
모듈을 다시지만,이번 시간에는 수출의copy
기능이다.얕은 복사 예제에도 동일한 예제 목록을 사용하겠습니다.
예제 2:
# Program 2 - Shallow Copyimport copyresult_A = , ]result_B = copy.copy(result_A)print(result_A)print(result_B)
위의 스크립트에서,우리가 사용하는copy
에서 방법을copy
모듈을 만들의 부분 복사본 listresult_A
이름result_B
., 그런 다음 두 목록의 내용이 콘솔에 인쇄되었습니다.
출력:
, ], ]
다시 목록은 예상대로 동일합니다. 다음으로 우리는 것이 차이점을 설명하는 결과를 얻을에서copy
및deepcopy
기능이 있다.
차이 깊고 얕은 사본
이제는 우리가 무엇을 논의 얕고 깊은 복사본은 그리고 왜 우리는 복사본을 만들고,그것은 시간의 차이에 대해 이야기들., 기본적으로있다,그냥 두 가지 핵심이의 차이점과 그들은 연결되어 서로 다른
- 깊은 사본 복사본을 저장하는 개체의의 값이지만 얕은 복사 이야기를 참조하여 원래의 메모리 주소
- 깊은 복사본을 반영하지 않을 변경하는 새로운 복사한 객체는 원래 개체 반면,얕은 복사지 않
우리는 이동하기 전에 구현 내가 당신 같은 이 시나리오를 상상해보십시오. 두 사람이 음료를 나누고 싶다고 가정 해 봅시다;그들은 두 개의 빈 안경과 두 개의 빨대를 가지고 있습니다., 그들이 공유할 수 있습이 마시는 두 가지 방법으로.
- 음료를 넣어에서 한 잔,그리고 모두 넣어 빨에서는 유리한 공유
- 음료를 넣어에서 모두 안고 하나 짚으로 각 글
첫 번째 시나리오는 얕은 복사합니다. 두 변수/인스턴스 모두 작업에 대해 동일한 메모리 위치를 가리키고/사용하고 있습니다. 두 번째 시나리오는 딥 카피의 시나리오입니다. 두 변수/경우를 가리키는/를 사용하여 두 개의 서로 다른 메모리 위치를 사용하여 작업을 처리합니다.,
비교 예
차이를 명확하게하기 위해 예제 1 부터 시작하여 위의 두 예에서이 정보를 사용합시다.
위에,우리는 우리 목록을 만든result_A
고 깊은 그것의 사본을라는result_B
. 자를 변경하려고 하는 컨텐츠에서result_B
고 있는지 어떤 영향을에서의 내용을result_A
.
출력:
Original List:, ]Deep Copy:, ]
예상하는 결과가 원래의 목록을 변경되지 않습니다., 보시다시피 딥 카피의 변경 사항은 원래 목록에 영향을 미치지 않았습니다.
이제 예제 2-얕은 복사와 같은 것을 시도 할 수 있습니다.
출력:
Original List:, ]Shallow Copy:, ]
여기에는 예상하는 결과가 원래 목록 및 복사 목록 수정한 후 하나의 변경합니다. 당신이 볼 수 있듯이,변경 얕은 복사 결과는 변경되는 것에 반영된 원래의 목록뿐만 아니라.
결론
이 게시물에,우리는 무엇인지에 대해 이야기 얕고 깊은 복사본을 어떻게 우리는 그들을 만들 수 있습에서는 파이썬은 언어를 사용하는’사본 모듈이 있습니다., 우리 사용되는 두 개의 그것의 기능 i.e.copy
및deepcopy
게 얕고 깊은 복사본을,각각합니다. 또한,우리는 두 가지 핵심 사이의 차이는 얕고 깊은 복사본을,또한 구현 얕고 깊은 복사에서는 파이썬은 사람들을 이해하는 차이점에서는 더 좋은 방법입니다.피>