Python 복사 객체

Vaibhhav Khetarpal 2023년1월30일
  1. 얕은 복사를 사용하여 Python에서 객체 복사
  2. 전체 복사를 사용하여 Python에서 객체 복사
Python 복사 객체

Python에서 할당 문은 객체를 복사 할 수있는 권한이 없지만 원래 객체의 참조를 공유하는 새 변수 만 생성합니다.

복사는 프로그래밍에서 매우 유용하며 주로 다른 사본을 손상시키지 않고 한 사본의 코드를 편집하는 데 필요합니다.

이 튜토리얼에서는 Python에서 객체를 복사하는 다양한 방법에 대해 설명합니다.

얕은 복사를 사용하여 Python에서 객체 복사

단순 복사 작업을 사용하려면copy모듈을 가져와야합니다. copy모듈은 프로그래머에게 일반적인 딥 및 얕은 복사 작업을 사용할 수있는 기능을 제공합니다.

단순 복사는 기본적으로 원본 요소에서 발견 된 자식 개체의 참조를 저장하는 새로운 수집 개체를 만듭니다. 이 프로세스는 재귀 적이 지 않으므로 자식 개체의 복사본을 만들지 않습니다.

단순 복사 작업이 발생하면 참조가 새 개체에 복사됩니다. 즉, 개체의 복사본이 변경되면 이러한 변경 사항이 원본 개체에도 반영됩니다.

다음 코드는Shallow copy작업을 사용하여 Python에서 객체를 복사합니다.

import copy

# the original list
ol = [2, 4, [1, 8], 6, 8]

# using copy to shallow copy
nl = copy.copy(ol)

print("Original list before shallow copy")
for x in range(0, len(ol)):
    print(ol[x], end=" ")

print("\r")

# modfying the new list
nl[2][0] = 9

print("Original list after shallow copy")
for x in range(0, len(ol)):
    print(ol[x], end=" ")

출력:

Original list before shallow copy
2 4 [1, 8] 6 8 
Original list after shallow copy
2 4 [9, 8] 6 8

앞서 언급했듯이이 작업에서는 자식 프로세스의 복사본이 생성되지 않습니다. 따라서 얕은 복사는 완전히 자립적이지 않고 원본 객체에 의존한다고 말할 수 있습니다.

전체 복사를 사용하여 Python에서 객체 복사

딥 및 얕은 복사 작업을 모두 사용하려면copy모듈을 Python 코드로 가져와야합니다.

전체 복사 작업에서 복사 프로세스는 항상 반복적으로 발생합니다. 전체 복사 작업은 먼저 새 수집 개체를 만든 다음 원본 요소에서 찾은 자식 개체의 복사본을 추가합니다.

기본적으로전체 복사프로세스에서 원본 객체의 사본이 새 수집 객체로 전달됩니다. 따라서 개체의 복사본이 변경된 경우 이러한 변경 사항은 원래 개체에 반영되지 않습니다. 이 전체 복사 작업을 구현하기 위해deepcopy()함수를 사용합니다.

다음 코드는deepcopy()함수를 사용하여 Python에서 전체 복사 작업을 구현합니다.

import copy

# original list
ol = [2, 4, [1, 8], 6, 8]

# use deepcopy() to deep copy
nl = copy.deepcopy(ol)

# original elements of list
print("Original list before deep copying")
for x in range(0, len(ol)):
    print(ol[x], end=" ")

print("\r")

# adding and element to new list
nl[2][0] = 9

# The second list after changes
print("The new list after modifications ")
for x in range(0, len(ol)):
    print(nl[x], end=" ")

print("\r")

print("Original list after deep copying")
for x in range(0, len(ol)):
    print(ol[x], end=" ")

출력:

Original list before deep copying
2 4 [1, 8] 6 8 
The new list after modifications 
2 4 [9, 8] 6 8 
Original list after deep copying
2 4 [1, 8] 6 8 

위의 문장에서 지시 한대로 딥 카피는 하위 객체를 재귀 적으로 복제 할 수 있습니다. 즉, 자체 의존적이며 원본 객체에 의존하지 않음을 의미합니다.

전체 복사 작업을 만드는 유일한 단점은 얕은 복사 작업보다 비교적 느리고 달성하는 데 더 많은 시간이 걸린다는 것입니다.

Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

관련 문장 - Python Object