Python으로 복사(Deep Copy 및 Shallow Copy)

| | | |

다른 사본을 변경하지 않고 한 사본을 변경할 수 있도록 사본이 필요한 경우가 있습니다. Python에는 두 가지 복사 방법이 있습니다.

  • 깊은 복사
  • 얕은 복사

이 복사를 만들기 위해 를 사용합니다. 모듈을 복사합니다. 얕은 복사 및 깊은 복사 작업에 copy 모듈을 사용합니다. 예를 들어


# 복사 모듈 가져오기

가져오기 복사


# 목록 1 초기화

li1 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "값"> 2 <코드 클래스 = "일반">, [ <코드 클래스 = "값"> 3 < /코드> <코드 클래스 = "일반">, <코드 클래스 = "값"> 5 <코드 클래스 = "일반">], <코드 클래스 = "값" > 4 ]


# 얕은 복사에 복사본 사용

li2 = 복사 py.copy ( li1)


# Deepcopy에 Deepcopy 사용

li3 <코드 클래스 = "케 yword"> = copy.deepcopy (li1)

위의 코드에서 copy() 는 목록의 얕은 사본을 반환하고 deepcopy() 는 목록의 전체 사본을 반환합니다.

deepcopy

딥 카피 — 복사 과정이 재귀적으로 일어나는 과정이다. 이것은 먼저 새 컬렉션 개체를 만든 다음 원본에서 찾은 자식 개체의 복사본으로 재귀적으로 채우는 것을 의미합니다. 깊은 복사의 경우 개체의 복사본이 다른 개체에 복사됩니다. 즉, 개체의 복사본에 대한 변경 사항은 원본 개체에 반영되지 않습니다. 파이썬에서 이것은 deepcopy () 함수를 사용하여 수행됩니다.


# 복사 작업을 보여주는 Python 코드


# 가져오기 & quot; 복사 & quot; 복사 작업용

가져오기 복사


# 목록 1 초기화

li1 = < 코드 클래스 = "일반"> [ <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "값"> 2 <코드 클래스 = "일반">, [ <코드 클래스 = "값"> 3 <코드 클래스 = "일반">, <코드 클래스 = "값"> 5 <코드 클래스 = "일반">], <코드 클래스 = "값"> 4 <코드 클래스="일반">]


# Deepcopy를 사용한 Deepcopy

li2 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> copy.deepcopy (li1)


<코드 클래스 = "comments"> # 원본 목록 항목

인쇄 ( "딥 복사 전의 원본 요소" )

for 나는 범위 ( <코드 클래스 ="값 "> 0 <코드 클래스 ="일반 ">, <코드 클래스 = "함수"> 렌 <코드 클래스 = "일반" > (li1)):

인쇄 (li1 [i], end < 코드 클래스 = "키워드"> = <코드 클래스 = "문자열"> " " <코드 클래스 ="일반 ">)

<코드 클래스 = "정의되지 않은 공백 ">

인쇄 ( " " )


# 새 목록에 항목 추가

<코드 클래스 = "일반"> li2 [ <코드 클래스 = "값"> 2 <코드 클래스 = "일반">] [ <코드 클래스 = "값"> 0 <코드 클래스 = "일반">] <코드 클래스 = "키워드"> = <코드 클래스 = "값"> 7


# 변경 사항이 l2에 반영되었습니다.

print ( "딥 복사 후 요소의 새 목록 " )

for i in 범위 <코드 클래스 = "일반"> ( <코드 클래스 = " 값 "> 0 <코드 클래스 ="일반 ">, < 코드 클래스 ="함수 "> len <코드 클래스 ="일반 "> (li1)):

인쇄 < 코드 클래스 = "일반"> (li2 [i], 끝 <코드 클래스 = "키워드"> = <코드 클래스 = "문자열"> "" <코드 클래스 = " 일반">)


<코드 클래스 = "키워드"> 인쇄 <코드 클래스 = "일반"> ( "" )


# 변경 사항은 원본 목록에 반영되지 않음
# 딥 카피와 유사

인쇄 ( "딥 복사 후 원본 요소" )

i 범위 <코드 클래스 ="일반 "> ( <코드 클래스 = "값"> 0 <코드 클래스 = "일반">, <코드 클래스 = "함수 "> len <코드 클래스 = "일반"> (li1)):

<코드 클래스 = "함수"> 인쇄 <코드 클래스 = "일반 "> (li1 [i], 끝 = "" )

종료:

원래 요소 s before deep copying 1 2 [3, 5] 4 deep copying 후의 새로운 요소 목록 1 2 [7, 5] 4 deep copying 후의 원본 요소 1 2 [3, 5] 4 

In 위의 예에서 목록에 대한 변경 사항은 다른 목록에 영향을 주지 않았으며 이는 목록 전체를 복사했음을 나타냅니다.

얕은 복사

얕은 복사는 새 컬렉션 개체를 만든 다음 발견된 하위 개체에 대한 참조로 채우는 것을 의미합니다. 원본에서. 복사 프로세스는 자체적으로 반복되지 않으므로 자식 개체 자체의 복사본을 만들지 않습니다. 얕은 복사의 경우 개체에 대한 참조가 다른 개체에 복사됩니다. 즉, 개체의 복사본에 대한 모든 변경 사항이 원본 개체에 반영됩니다. Python은 "복사() " 함수를 사용하여 이 작업을 수행합니다.


# 복사 작업을 보여주는 Python 코드


# 가져오기 & quot; 복사 & quot; 복사 작업용

가져오기 복사


# 목록 1 초기화

li1 = < 코드 클래스 = "일반"> [ <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "값"> 2 <코드 클래스 = "일반">, [ <코드 클래스 = "값"> 3 <코드 클래스 = "일반">, <코드 클래스 = "값"> 5 <코드 클래스 = "일반">], <코드 클래스 = "값"> 4 <코드 클래스="일반">]


# 단순 복사에 복사 사용

li2 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> copy.copy (li1)


<코드 클래스 = "comments"> # 원본 목록 항목

인쇄 ( " 단순 복사 전의 원래 요소 " )

for i 범위 (< /코드> <코드 클래스 = "값"> 0 <코드 클래스 = "일반">, <코드 클래스 = "함수"> len <코드 클래스 = "일반"> (li1)):

인쇄 (li1 [i], end = <코드 클래스 = "문자열"> "" <코드 클래스 = "일반">)


<코드 class = "keyword"> 인쇄 ( "" )


# 새 목록에 항목 추가

li2 [ <코드 클래스 = "값"> 2 <코드 클래스 = "일반">] [ <코드 클래스 = "값"> 0 <코드 클래스 = "pl ain">] <코드 클래스 = "키워드"> = <코드 클래스 = "값" > 7


<코드 클래스 = "설명 "> # 변경 사항이 반영되었는지 확인

print ( "얕은 복사 후의 원본 요소" )

for 나는 범위 ( <코드 클래스 = "값"> 0 <코드 클래스 = "일반">, <코드 클래스 = "함수"> len <코드 클래스 = "일반"> (li1 )):

인쇄 (li1 [i], end = <코드 클래스 ="문자열 ">" " <코드 클래스 ="일반 ">)

종료:

얕은 복사 전의 원래 요소 1 2 [3, 5] 4 단순 복사 후 원본 요소 1 2 [7, 5] 4 

위의 예에서 목록에 대한 변경 사항은 이(가) 다른 목록에 적용되어 목록이 복사되었음을 나타냅니다.

중요 사항:
얕은 복사와 깊은 복사의 차이는 복합 개체(다음을 포함하는 개체)에만 적용됩니다. 목록이나 클래스 인스턴스와 같은 다른 개체):

  • 얕은 복사는 새 합성 개체를 만든 다음 (가능한 한) 원본에서 찾은 개체에 대한 참조를 삽입합니다.
  • 깊은 복사는 새로운 복합 개체를 만든 다음 원본에서 찾은 개체의 복사본을 재귀적으로 여기에 삽입합니다.

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method