도해 Python 의 깊이 copy(통속 적 으로 알 기 쉽다)

깊이
할당 연산

l1 = [1, 2, 3, [22, 33]]
l2 = l1
l1.append(666)

print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33], 666]
도해:

주의:l2 = l1하나의 지향 이 고 할당 입 니 다.깊이 copy 와 무관 합 니 다.
얕 은 복사
사실 목록 은 하나의 슬롯 입 니 다.각 슬롯 은 이 대상 의 메모리 주 소 를 저장 합 니 다.

 1.         
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
#         ,   copy
# import copy
# l2 = copy.copy(l1)
l1.append(666)

print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33]]

 2.         
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[-1].append(666)

print(l1) # [1, 2, 3, [22, 33, 666]]
print(l2) # [1, 2, 3, [22, 33, 666]]、

 3.  l1          6
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[0] = 6

print(l1) # [6, 2, 3, [22, 33]]
print(l2) # [1, 2, 3, [22, 33]]
도해:
예 1

예 2

예 3

요약:
얕 은 copy:메모리 에 공간 을 새로 열 어 이 copy 의 목록 을 저장 하지만 목록 의 내용 은 이전 대상 의 메모리 주 소 를 그대로 사용 합 니 다.
주의:
슬라이스 중 에 다 자 르 면 얕 은 copy 에 속 합 니 다.
딥 카피

import copy
l1 = [1, 2, 3, [22, 33]]
l2 = copy.deepcopy(l1)
l1.append(666)
print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33]]
도해:
본질은 다음 그림 과 같다.

그러나 python 은 딥 copy 를 최적화 시 켰 습 니 다.가 변 적 인 데이터 형식 을 메모리 에 다시 만 들 었 습 니 다.가 변 적 이지 않 은 데이터 형식 은 이전 것 을 그대로 사용 하기 때문에 메모리 에는 다음 과 같 습 니 다.

요약:
딥 copy:메모리 에 새로운 공간 을 열 고 원 목록 과 목록 에 있 는 가 변 데이터 형식 을 다시 만 들 것 입 니 다.가 변 데이터 형식 은 이전 과 같 습 니 다.
파 이 썬 의 깊 고 얕 은 copy(통속 적 이 고 알 기 쉬 운)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 의 깊 고 얕 은 복사 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기