Articles

Python 얕은 복사하고 깊은 사본

사본에 있는 개체는 파이썬

에서 Python,우리가 사용하는=운영자를 복사본을 만들의 개체입니다. 생각할 수 있습니다 이 새로운 객체를 생성한다;그렇지 않습니다. 그것이 만들어 새로운 변수는 주식의 참고로 원래 개체입니다.

의 예를 들어 우리가 목록을 만들라는 old_list 통과 객체 참조를 new_list 사용하는=연산자입니다.,

예제 1:복사본을 사용하여 연산자

실행하면 위의 프로그램,출력은 다음과 같습니다.

Old List: , , ]ID of Old List: 140673303268168New List: , , ]ID of New List: 140673303268168

당신이 볼 수 있는 출력에서 두 변수 모두 old_list 및 new_list 공유하는 동일한 id i.e140673303268168.따라서 new_list 또는 old_list 의 값을 수정하려는 경우 변경 사항이 두 가지 모두에서 표시됩니다.

본질적으로 때로는 원래 값을 변경하지 않고 새 값만 수정하거나 그 반대로 변경하려는 경우가 있습니다., Python,는 방법은 두 가지가 있을 만드는 복사본:

  1. 얕은 사본
  2. 깊은 복사

이러한 복사본을 작품,우리가 사용하는copy모듈이 있습니다.

복사 모듈

얕고 깊은 복사 작업을 위해 파이썬의copy모듈을 사용합니다. 예를 들어

import copycopy.copy(x)copy.deepcopy(x)

여기서copy()x 의 얕은 복사본을 반환합니다.,

얕은 복사

얕은 복사본은 원래 요소의 참조를 저장하는 새 객체를 만듭니다.

따라서 얕은 사본은 중첩 된 객체의 복사본을 만들지 않고 대신 중첩 된 객체의 참조를 복사합니다. 즉,복사 프로세스는 중첩 된 객체 자체의 복사본을 재귀하거나 만들지 않습니다.,

예제 2:복사본을 만들어를 사용하여 얕은 사본

import copyold_list = , , ]new_list = copy.copy(old_list)print("Old list:", old_list)print("New list:", new_list)

때 우리는 프로그램을 실행하고,출력은 다음과 같습니다.

Old list: , , ]New list: , , ]

위에서 프로그램을 만들었습니다 중첩된 목록과 그 복사본을 사용하여copy()방법입니다.이것은 동일한 내용을 가진 새롭고 독립적 인 객체를 생성한다는 것을 의미합니다. 이를 확인하기 위해 old_list 와 new_list 를 모두 인쇄합니다.,

는지 확인하 new_list 에서 다른 old_list,우리는 우리를 추가하려고 중첩 새로운 객체를 원래 그것을 확인합니다.

예 3:를 추가하 old_list 사용하여 얕은 사본

때 우리는 프로그램을 실행하고,출력:

Old list: , , , ]New list: , , ]

위의 프로그램 안에서,우리가 만들의 부분 복사본 old_list. New_list 에는 old_list 에 저장된 원래 중첩 된 객체에 대한 참조가 포함되어 있습니다. 그런 다음 새 목록 즉를 old_list 에 추가합니다., 이 새 하위 목록은 new_list 에 복사되지 않았습니다.

그러나 old_list 에서 중첩 된 객체를 변경하면 변경 사항이 new_list 에 나타납니다.

를 들어 4:를 추가하는 새로운 중첩된 객체를 사용하여 얕은 사본

import copyold_list = , , ]new_list = copy.copy(old_list)old_list = 'AA'print("Old list:", old_list)print("New list:", new_list)

때 우리는 프로그램을 실행하고,출력:

Old list: , , ]New list: , , ]

깊은 복사

전체 복사본을 만들 새로운 객체을 재귀적으로 추가의 사본 중첩에 존재하는 객체 원래 요소입니다.

예제 2 를 계속하겠습니다., 그러나 우리가 만들려 깊은 복사본을 사용하는deepcopy()기능에 존재하는copy모듈이 있습니다. 딥 복사본은 원본 객체와 모든 중첩 된 객체의 독립적 인 복사본을 만듭니다.

예 5:복사 목록을 사용하여 deepcopy()

import copyold_list = , , ]new_list = copy.deepcopy(old_list)print("Old list:", old_list)print("New list:", new_list)

때 우리는 프로그램을 실행하고,출력:

Old list: , , ]New list: , , ]

위의 프로그램 안에서,우리가 사용하는deepcopy()기능을 만드는 복사본을 보이는 비슷합니다.,

그러나 원래 객체 old_list 에서 중첩 된 객체를 변경하면 copy new_list 에 변경 사항이 표시되지 않습니다.

예 6:를 추가하는 새로운 개체 중첩에 목록을 사용하여 깊은 복사

때 우리는 프로그램을 실행하고,출력:

Old list: , , ]New list: , , ]

위에서 프로그램을 때,우리는 새 값을 할당 old_list,우리가 볼 수 있습니다만 old_list 을 수정합니다. 즉,old_list 와 new_list 는 모두 독립적입니다. 이는 old_list 가 재귀 적으로 복사 되었기 때문에 모든 중첩 된 객체에 해당하기 때문입니다.