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,는 방법은 두 가지가 있을 만드는 복사본:
- 얕은 사본
- 깊은 복사
이러한 복사본을 작품,우리가 사용하는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 가 재귀 적으로 복사 되었기 때문에 모든 중첩 된 객체에 해당하기 때문입니다.피>