파이썬 튜토리얼 : 파이썬 목록 할당, 복사, 자세한 다섯 종류의 깊고 얕은 사본을 복사

파이썬 튜토리얼 : 파이썬 목록 할당, 복사, 자세한 다섯 종류의 깊고 얕은 사본을 복사

개요

이 질문의 목록, 단순 해 보이는 사본을 복사하지만, 특히 초보자에 대한 많은 지식을 가지고 있지만, 물론 일이 같은 목록 할당, 사본으로, 잘되지 않았다가 결국 얕은 및 깊은 사본 등 복잡한 용어를 복사 차이와 효과는 무엇입니까?

파이썬 튜토리얼 : 파이썬 목록 할당, 복사, 자세한 다섯 종류의 깊고 얕은 사본을 복사

 

목록 지정

# 새로운리스트를 정의 
L1 =한다. 1, 2, 3 ,. ,. 4 ,. 5]
과제 # L2
, L2 = L1의
전단 (L1)
(L2) [0] = (100)
전단 (L1)

샘플 결과 :

[1, 2, 3, 4, 5] 
[100, 2, 3, 4, 5]

당신은, L1 L2도 변경된 할당 후 변경됩니다 참조 단순 해 보이는 "복사", 파이썬에서 목록 개체를 변경할에 속하고, 변경 가능한 객체의 복제는 메모리 공간의 목록에 실제로 유사하다 할 수 있습니다 는 C 포인터가 다시 오히려 그러한 복사 할 때 새로운 메모리 공간 할당을 생성합니다 문자열로 불변의 객체보다, 새로운 변수 이름을 가리 킵니다. 이 시점에서, 즉, L1 및 L2는 그 후 어떻게 등본, 메모리 공간의 동일한 부분입니까?

얕은 사본

요소의 목록이 불변의 객체를 때, 우리는 다음과 같은 방법으로 목록에 값을 지정할 수 있습니다 :

복사 오기 
# 1의 새로운리스트를 정의
L0 = [1, 2 ,. ,. 3 4 5 ,..]
인쇄합니다 (L0)
인쇄 ( '-'* 40)

사용 슬라이스

L1 = L0 [:] 
L1 [0] = 100
인쇄 (L0)

사용 모듈 사본

수입 복사 
L2 = copy.copy (L0)
L2 [0] = 100
인쇄 (L0)

() 목록을 사용하여

L3 =리스트 (L0) 
L3 [0] = 100
인쇄 (L0)

방법 뻗어있는 목록을 사용하여

L4 = [] 
L4.extend (L0)
L4 [0] = 100
인쇄 (L0)

지능형리스트를 사용하여

L5 = I에 대한 L0 I] 
L5 [0] = 100
인쇄 (L0)

당신은 [1, 2, 3, 4, 5], 우리가 성공적으로 목록의 사본을 수행 한 최종 인쇄 결과는 볼 수 있지만 조건이 불변의 객체로 요소 목록에있을 필요가? 리스트 요소 인 경우 가변 객체가 객체에 대한 참조를 가지기 때문에 오히려 이러한 경우 복사로 참조 새로운 메모리 공간을 만드는 대신, 발생 :

L0 = [1, 2, [3], 4, 5] 
인쇄 (L0)
L2 = L0의 [:]
L2 [2] [0] = (100)
전단 (L0)

샘플 결과 :

[1, 2, [3], 4, 5] 
[1, 2, [100], 4, 5]

객체 변수리스트 L0 포함하면 알 수있다 가변 소자 L2를 변경하는 것을 특징으로 복제 L1 [2], 오브젝트의 변수 L0 L0 [2] 또한, 변경 어떻게 달성 그것의 진정한 전체 사본?

깊은 사본

복사 모듈을 복사 깊은 deepcopy를 사용 :

수입 복사 
L0 = 1, 2, 3 내지 4, 5]
인쇄 (L0)
L2 = copy.deepcopy (L0)
L2 [2] [0] = 100
인쇄 (L2)
인쇄 (L0)

샘플 결과 :

[1, 2, [100], 4, 5] 
[1, 2, [3], 4, 5]

더 파이썬 튜토리얼 모두를 계속 업데이트됩니다! 초급 파이썬 작은 친구는 파이썬 학습 경로 시스템은 오 갈 따라야!

추천

출처www.cnblogs.com/cherry-tang/p/10972709.html