소개

이 튜토리얼에서는,우리는 우리가 논의 얕은 사본에 대한 깊은 사본의 도움으로 예에서는 Python. 우리 커버의 정의 깊고 얕은 사본과 함께 그것의 구현 라이브러리가 들어를 평가하는 핵심 사이의 차이점을 두 종류의 복사본입니다.

에서는 프로그램의 많은 것을 우리가 쓰는 방법에 상관없이 기본적인은,그들이 우리가 끝까지 필요 복사하는 목록 또는 개체 중 하나에 대한 여러 가지 이유로,다음과 같 계산 효율입니다., 그렇게 할 수있는 두 가지 방법이 있습니다,중 깊은 사본을 만들거나 얕은 사본. 이 둘의 차이점을 논의하기 전에 먼저 깊고 얕은 사본이 정확히 무엇인지 이해합시다.

Python 의 Deep Copies

deep copy 는 고유 한 메모리 주소를 가진 전체 객체 또는 목록의 새롭고 별도의 복사본을 만듭니다. 이것이 의미하는 바는 객체/목록의 새 사본에서 변경 한 내용이 원래 사본에 반영되지 않는다는 것입니다. 이 프로세스는 먼저 새 목록 또는 개체를 만든 다음 요소를 원래 항목에서 새 항목으로 재귀 적으로 복사하여 발생합니다.,간단히 말하면 두 객체는 서로 완전히 독립적입니다. 이것은 C++,Java 및 C#과 같은 언어로 값을 전달하는 개념과 유사합니다.

딥 카피 예제

파이썬에서 딥 카피의 개념을 구현하려면 복사 모듈을 사용하겠습니다.

자 말로는 우리의 목록을 나열하라는result_A포함하는 학년의 학생에서 3 과목에 대한 첫 번째 두 개의 년간의 학교,그리고 우리를 창조하려는 정확하게 비슷한 결과 목록에 대한 학생 B 니다., 우리는 마음만 먹으면 깊이의 복사본을result_A목록,그리고 몇 가지 변화에서는 깊은 복사를 보여주기 위하여 나중에 학년의 학생 B.

예제 1:

에서 스크립트가 위의 우리가 사용하는deepcopy에서 방법을copy모듈을 복사 목록result_Aresult_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., 그런 다음 두 목록의 내용이 콘솔에 인쇄되었습니다.

출력:

, ], ]

다시 목록은 예상대로 동일합니다. 다음으로 우리는 것이 차이점을 설명하는 결과를 얻을에서copydeepcopy기능이 있다.

차이 깊고 얕은 사본

이제는 우리가 무엇을 논의 얕고 깊은 복사본은 그리고 왜 우리는 복사본을 만들고,그것은 시간의 차이에 대해 이야기들., 기본적으로있다,그냥 두 가지 핵심이의 차이점과 그들은 연결되어 서로 다른

  1. 깊은 사본 복사본을 저장하는 개체의의 값이지만 얕은 복사 이야기를 참조하여 원래의 메모리 주소
  2. 깊은 복사본을 반영하지 않을 변경하는 새로운 복사한 객체는 원래 개체 반면,얕은 복사지 않

우리는 이동하기 전에 구현 내가 당신 같은 이 시나리오를 상상해보십시오. 두 사람이 음료를 나누고 싶다고 가정 해 봅시다;그들은 두 개의 빈 안경과 두 개의 빨대를 가지고 있습니다., 그들이 공유할 수 있습이 마시는 두 가지 방법으로.

  1. 음료를 넣어에서 한 잔,그리고 모두 넣어 빨에서는 유리한 공유
  2. 음료를 넣어에서 모두 안고 하나 짚으로 각 글

첫 번째 시나리오는 얕은 복사합니다. 두 변수/인스턴스 모두 작업에 대해 동일한 메모리 위치를 가리키고/사용하고 있습니다. 두 번째 시나리오는 딥 카피의 시나리오입니다. 두 변수/경우를 가리키는/를 사용하여 두 개의 서로 다른 메모리 위치를 사용하여 작업을 처리합니다.,

비교 예

차이를 명확하게하기 위해 예제 1 부터 시작하여 위의 두 예에서이 정보를 사용합시다.

위에,우리는 우리 목록을 만든result_A고 깊은 그것의 사본을라는result_B. 자를 변경하려고 하는 컨텐츠에서result_B고 있는지 어떤 영향을에서의 내용을result_A.

출력:

Original List:, ]Deep Copy:, ]

예상하는 결과가 원래의 목록을 변경되지 않습니다., 보시다시피 딥 카피의 변경 사항은 원래 목록에 영향을 미치지 않았습니다.

이제 예제 2-얕은 복사와 같은 것을 시도 할 수 있습니다.

출력:

Original List:, ]Shallow Copy:, ]

여기에는 예상하는 결과가 원래 목록 및 복사 목록 수정한 후 하나의 변경합니다. 당신이 볼 수 있듯이,변경 얕은 복사 결과는 변경되는 것에 반영된 원래의 목록뿐만 아니라.

결론

이 게시물에,우리는 무엇인지에 대해 이야기 얕고 깊은 복사본을 어떻게 우리는 그들을 만들 수 있습에서는 파이썬은 언어를 사용하는’사본 모듈이 있습니다., 우리 사용되는 두 개의 그것의 기능 i.e.copydeepcopy게 얕고 깊은 복사본을,각각합니다. 또한,우리는 두 가지 핵심 사이의 차이는 얕고 깊은 복사본을,또한 구현 얕고 깊은 복사에서는 파이썬은 사람들을 이해하는 차이점에서는 더 좋은 방법입니다.