~ 안에 파이썬 , 할당 문은 개체를 복사하지 않고 대상과 개체 사이에 바인딩을 만듭니다. 우리가 사용할 때 = 연산자, 원본 개체의 참조를 공유하는 새 변수만 생성합니다. 이러한 객체의 실제 복사본이나 복제본을 생성하려면 다음에서 복사 모듈을 사용할 수 있습니다. 파이썬 .
Python Deepcopy의 구문
통사론: 복사.깊은 복사(x)
Python Shallowcopy의 구문
통사론: 복사.복사(x)
예:
이러한 복사본을 만들기 위해 복사 모듈을 사용합니다. copy()는 목록의 얕은 복사본을 반환하고 deepcopy()는 목록의 깊은 복사본을 반환합니다. 보시다시피 둘 다 동일한 값을 갖지만 ID가 다릅니다.
예: 이 코드는copy>
중첩 목록의 얕은 복사본과 깊은 복사본을 모두 생성하는 모듈li1>
. 얕은 사본,li2>
는 다음을 사용하여 생성됩니다. copy.copy()>
, 최상위 구조를 유지하지만 내부 목록에 대한 참조를 공유합니다. 딥 카피,li3>
는 다음을 사용하여 생성됩니다. copy.deepcopy()>
, 결과적으로 완전히 독립적인 복사본이 생성됩니다.li1>
, 모든 중첩된 요소를 포함합니다. 코드는 ID와 값을 인쇄합니다.li2>
그리고li3>
, 참조 및 독립성 측면에서 얕은 복사본과 깊은 복사본의 차이점을 강조합니다.
파이썬3
import> copy> li1> => [> 1> ,> 2> , [> 3> ,> 5> ],> 4> ]> li2> => copy.copy(li1)> print> (> 'li2 ID: '> ,> id> (li2),> 'Value: '> , li2)> li3> => copy.deepcopy(li1)> print> (> 'li3 ID: '> ,> id> (li3),> 'Value: '> , li3)> |
>
>
산출:
li2 ID: 2521878674624 Value: [1, 2, [3, 5], 4] li3 ID: 2521878676160 Value: [1, 2, [3, 5], 4]>
Python의 Deep Copy란 무엇입니까?
깊은 복사본은 원본에서 찾은 항목의 복사본을 재귀적인 방식으로 개체에 삽입하기 전에 새로운 복합 개체를 만듭니다. 이는 먼저 새 컬렉션 개체를 생성한 다음 원본에서 찾은 하위 개체의 복사본으로 해당 컬렉션을 반복적으로 채우는 것을 의미합니다. Deep Copy의 경우 객체의 복사본이 다른 객체에 복사됩니다. 그것은 다음을 의미합니다 모든 변경 사항 객체의 복사본으로 만들어짐 원래 개체에 반영되지 않습니다.

예:
위의 예에서 목록이 변경되었습니다. 영향을 미치지 않았다 다른 목록은 목록이 깊게 복사되었음을 나타냅니다.
이 코드는 다음을 사용하여 중첩된 요소가 있는 목록의 전체 복사를 보여줍니다.copy>
기준 치수. 처음에는 원래 요소를 인쇄합니다.li1>
그런 다음 이를 딥 복사하여 생성합니다.li2>
. 의 요소 수정li2>
영향을 미치지 않습니다li1>
, 별도의 인쇄물에서 알 수 있듯이. 이는 전체 복사가 독립적인 복사본을 생성하여 복사본이 변경된 후에도 원본 목록의 내용을 유지하는 방법을 강조합니다.
업캐스팅
파이썬3
import> copy> li1> => [> 1> ,> 2> , [> 3> ,> 5> ],> 4> ]> li2> => copy.deepcopy(li1)> print> (> 'The original elements before deep copying'> )> for> i> in> range> (> 0> ,> len> (li1)):> > print> (li1[i],end> => ' '> )> print> (> '
'> )> li2[> 2> ][> 0> ]> => 7> print> (> 'The new list of elements after deep copying '> )> for> i> in> range> (> 0> ,> len> ( li1)):> > print> (li2[i],end> => ' '> )> print> (> '
'> )> print> (> 'The original elements after deep copying'> )> for> i> in> range> (> 0> ,> len> ( li1)):> > print> (li1[i],end> => ' '> )> |
>
>
산출:
The original elements before deep copying 1 2 [3, 5] 4 The new list of elements after deep copying 1 2 [7, 5] 4 The original elements after deep copying 1 2 [3, 5] 4>
Python의 얕은 복사란 무엇입니까?
얕은 복사본은 새로운 복합 개체를 만든 다음 그 안에 원본에 포함된 개체를 참조합니다. 즉, 새 컬렉션 개체를 구성한 다음 원본에 있는 하위 개체에 대한 참조로 채웁니다. 복사 프로세스는 반복되지 않으므로 하위 개체 자체의 복사본을 만들지 않습니다. 얕은 복사의 경우 개체의 참조가 다른 개체에 복사됩니다. 그것은 다음을 의미합니다 모든 변경 사항 객체의 복사본으로 만들어짐 반영해라 원래 개체에서. Python에서는 다음을 사용하여 구현됩니다. 복사() 기능.

예:
이 예에서는 목록의 변경 사항이 영향을 미쳤다 목록이 얕게 복사되었음을 나타내는 또 다른 목록입니다. 중요한 사항: 얕은 복사와 깊은 복사의 차이점은 복합 객체(목록이나 클래스 인스턴스와 같은 다른 객체를 포함하는 객체)에만 해당됩니다.
- 얕은 복사본은 새로운 복합 개체를 구성한 다음 (가능한 한) 원본에서 찾은 개체에 대한 참조를 삽입합니다.
- 깊은 복사본은 새로운 복합 개체를 구성한 다음 원본에서 찾은 개체의 복사본을 재귀적으로 삽입합니다.
예: 이 코드는 다음을 사용하여 중첩된 요소가 있는 목록의 얕은 복사를 보여줍니다. ' copy'>
기준 치수. 처음에는 원본 요소를 인쇄합니다.li1>
그런 다음 얕은 복사를 수행합니다.li2>
. 요소 수정li2>
해당 요소에 영향을 미칩니다li1,>
두 목록 모두 내부 목록에 대한 참조를 공유하기 때문입니다. 이는 얕은 복사가 새 목록을 생성하지만 중첩된 요소에 대해 완전한 독립성을 제공하지 않음을 보여줍니다.
파이썬3
import> copy> li1> => [> 1> ,> 2> , [> 3> ,> 5> ],> 4> ]> li2> => copy.copy(li1)> print> (> 'The original elements before shallow copying'> )> for> i> in> range> (> 0> ,> len> (li1)):> > print> (li1[i],end> => ' '> )> print> (> '
'> )> li2[> 2> ][> 0> ]> => 7> print> (> 'The original elements after shallow copying'> )> for> i> in> range> (> 0> ,> len> ( li1)):> > print> (li1[i],end> => ' '> )> |
일러스트레이터의 위 첨자
>
>
산출:
The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>
추천 기사 – 클래스의 얕은 복사본과 깊은 복사본의 차이점