Python 기반 할당, 얕은 복제, 깊은 복제의 차이
부치
새 메모리 공간을 열지 않고 새 대상의 인용만 복사합니다.그래서 한 데이터가 변화할 때 다른 데이터도 이에 따라 바뀐다.
2. 얕은 복사
원본 객체에 대한 참조를 포함하는 새 객체를 작성합니다.얕은 복사본을 얕은 복사본이라고 하는 이유는 1층, 즉 가장 바깥쪽의 대상 자체만 복사하고 내부의 요소는 모두 하나의 인용만 복사했기 때문이다. 즉, 내부 요소가 수정되면 다른 데이터도 변화한다.
간단한 복제본의 세 가지 형태:
A = [1, 2, 3, 4]
# 1
B = A[:]
# 2
B = [a for a in A]
B = list(A)
B = copy.copy(A)
얕은 복제본은 다음과 같은 두 가지 시나리오로 구성됩니다.1) 얕은 복사의 값이 변하지 않는 대상(예를 들어 문자열, 원조, 수치 유형)인 경우, 부여된 값과 마찬가지로 대상의 메모리 주소 (id () 는 얕은 복사의 원래 값과 일치합니다.
2) 얕은 복사본의 값이 가변 객체(예: 목록, 사전, 컬렉션 등)일 경우에도 두 가지 상황으로 나누어 논의해야 합니다.
우선, 원래 값의 메모리 주소는 복사된 메모리 주소와 다르다.
3. 딥 카피
딥 카피로 복사된 대상은 새로운 대상이며 원래의 대상과 아무런 관련이 없다.기존 객체를 변경하면 새 복제 객체에 영향을 주지 않습니다.
예
import copy
#
# A = (1, 2, 'hello') #
# A = 1 #
A = 'hello' #
print("******** ********")
B = A
print(id(A))
print(id(B))
print(A)
print(B)
print("******** ********")
B = copy.copy(A)
print(id(A))
print(id(B))
print(A)
print(B)
print("******** ********")
B = copy.deepcopy(A)
print(id(A))
print(id(B))
print(A)
print(B)
결과:*** **값 부여 *** ***
1894005658264
1894005658264
hello
hello
* * * * 얕은 복사 * * * *
1894005658264
1894005658264
hello
hello
****** 딥 카피 ******
1894005658264
1894005658264
hello
hello
import copy
#
A = [1, 2, 3]
print("******** ********")
B = A
print(id(A))
print(id(B))
print(A)
print(B)
print("******** ********")
B = copy.copy(A)
print(id(A))
print(id(B))
print(A)
print(B)
print("******** ********")
B = copy.deepcopy(A)
print(id(A))
print(id(B))
print(A)
print(B)
결과:*** **값 부여 *** ***
1602694308360
1602694308360
[1, 2, 3]
[1, 2, 3]
* * * * 얕은 복사 * * * *
1602694308360
1602694308424
[1, 2, 3]
[1, 2, 3]
****** 딥 카피 ******
1602694308360
1602950316296
[1, 2, 3]
[1, 2, 3]
import copy
#
A = [1, 2, 3, [11, 10, 20]]
#
B1 = A #
B2 = copy.copy(A) #
B3 = copy.deepcopy(A) #
A.append(4)
print("******** ********")
print(id(A))
print(id(B1))
print(A)
print(B1)
print("******** ********")
print(id(A))
print(id(B2))
print(A)
print(B2)
print("******** ********")
print(id(A))
print(id(B3))
print(A)
print(B3)
결과:*** **값 부여 *** ***
2215309238856
2215309238856
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20], 4]
* * * * 얕은 복사 * * * *
2215309238856
2215593496776
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20]]
****** 딥 카피 ******
2215309238856
2215593518024
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20]]
import copy
#
A = [1, 2, 3, [11, 10, 20]]
#
B1 = A #
B2 = copy.copy(A) #
B3 = copy.deepcopy(A) #
A[3].append(4)
print("******** ********")
print(id(A))
print(id(B1))
print(A)
print(B1)
print("******** ********")
print(id(A))
print(id(B2))
print(A)
print(B2)
print("******** ********")
print(id(A))
print(id(B3))
print(A)
print(B3)
결과*** **값 부여 *** ***
2288591069768
2288591069768
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20, 4]]
* * * * 얕은 복사 * * * *
2288591069768
2288847138760
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20, 4]]
****** 딥 카피 ******
2288591069768
2288847168264
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20]]
Python의 기초적인 부치, 얕은 복사, 깊은 복사의 차이에 관한 이 글은 여기에 소개되었습니다. 더 많은 Python의 부치 얕은 복사 깊은 복사의 차이에 관한 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.