파이썬에서는 복사 모듈을 주로 소개합니다.
복사 모듈에는 목록, 튜플, 사전 및 사용자 정의 개체의 인스턴스를 포함하여 복합 개체의 깊은 복사본과 얕은 복사본을 생성하는 기능이 포함되어 있습니다.
########
복사(x)
########
새 복합 객체를 생성하고 참조로 멤버를 복사하여 x의 얕은 복사본을 만듭니다. 더 깊게 말하자면
는 객체를 복사하지만 여전히 객체의 요소에 대한 참조를 사용합니다.
내장형의 경우 이 기능을 자주 사용하지 않습니다.
대신 list(x), dict(x), set(x) 등과 같은 호출 메서드를 사용하여 x의 얕은 복사본을 생성합니다.
을 직접 사용한다는 것을 알아야 합니다. 유형 이름은 확실히 copy()를 사용하는 것보다 낫습니다. 그러나 그들은 동일한 효과를 얻습니다.
또 다른 요점은 수정할 수 없는 객체(문자열, 숫자, 튜플)에 대한 것입니다. 수정에 대해 걱정할 필요가 없기 때문입니다. 복사 여부는
의미가 없습니다.
또 다른 점은 is 연산자를 사용하여 객체 복사 여부를 결정할 수 있다는 것입니다.
a는 b입니다 -> True a와 b는 복사본이 아니라 동일한 개체를 참조합니다.
- -> False a와 b는 서로의 복사본입니다.
예를 들어 예:
(1)
>>> = 복사 .copy(a)
>>> b
[1, 2, 3]
>>> )
>>>a
[1, 2, 3, 4]
>>>b
[1 , 2 , 3]
>>> a는 b입니다
거짓
(2)
>> [1 ,2,3]
>>> b = a
>>>b
[1, 2, 3]
>>>a.append(4)
>>>
[1, 2, 3, 4]
>>b
[1, 2, 3, 4]
>>b.append(6)
> >a,b
([1, 2, 3, 4, 6], [1, 2, 3, 4, 6])
(3)
> ;>> a = [1,2,3]
>> b = 목록(a)
>>b
[1, 2, 3]
>>> a.append(4)
>>> 2, 3, 4]
>>>b
[1, 2, 3]
>> (4)
>>> a = [[1], ['a'], ['A']]
>>> copy( a)
>>> 인쇄 a, b
[[1], ['a'], ['A']] [[1], [' a' ], ['A']]
>>> b[1].append('b')
>>> 🎜> [[1], ['a', 'b'], ['A']]
>>> ', 'b'], ['A']]
>>> b.append([100,101])
>>> 🎜> [[1], ['a', 'b'], ['A'], [100, 101]]
>>>a
[[ 1] , ['a', 'b'], ['A']]
예제 (3)에서는 a의 얕은 복사본 객체 b를 볼 수 있습니다. 객체
의 변경 사항은 서로 영향을 미치지 않지만 a와 b 객체의 요소는 동일한 객체를 참조하므로 a 또는 b가 해당 객체의 요소를 변경하면
에 영향을 미칩니다.다른 것의 가치.
객체와 객체의 모든 요소의 값을 완전히 복사하려면 아래의 deepcopy() 함수만 사용하세요.
####################
deepcopy(x[, 방문])
# # ####################
새로운 복합 개체를 만들고 x의 모든 구성원을 반복적으로 복사하여 x의 전체 복사본을 만듭니다.
visit은 방문한 개체를 추적하여
을 정의하는 데이터 구조에서 반복되는 주기를 감지하고 방지하는 것이 목적인 선택적 사전입니다.
일반적으로 필요하지는 않지만
클래스는 __copy__(self) 및 __deepcopy__(self, Visit) 메서드를 구현하여 사용자 지정 복사 메서드를 구현할 수 있습니다. 각각 깊은 복사 작업.
__deepcopy__() 메서드는 복사 프로세스 중에 이전에 발견된 객체를 추적하는 데 사용되는 사전 방문을 사용해야 합니다.
__deepcopy__() 메서드의 경우
에서 구현에 포함된 다른 deepcopy() 메서드(있는 경우)에 방문을 전달하는 것 외에 다른 작업을 수행할 필요가 없습니다.
클래스가 피클 모듈에서 사용하는 __getstate__() 및 __setstate__() 메서드를 구현하는 경우 복사 모듈은
이러한 메서드를 사용하여 복사본을 생성합니다.
그러나 __copy__(self) 및 __deepcopy__(self, Visit) 메서드를 구현하면
클래스에서 사용자 정의 복사 메서드를 구현할 수 있습니다. 이 두 메서드는 각각 얕은 복사 작업과 전체 복사 작업을 구현합니다. .
__deepcopy__() 메서드는 복사 프로세스 중에 이전에 발견된 객체를 추적하는 데 사용되는 사전 방문을 사용해야 합니다.
__deepcopy__() 메서드의 경우
에서 구현에 포함된 다른 deepcopy() 메서드(있는 경우)에 방문을 전달하는 것 외에 다른 작업을 수행할 필요가 없습니다.
클래스가 피클 모듈에서 사용하는 __getstate__() 및 __setstate__() 메서드를 구현하는 경우 복사 모듈은
이러한 메서드를 사용하여 복사본을 생성합니다. , 그러나 __copy__(self) 및 __deepcopy__(self, Visit) 메서드를 구현하면
클래스에서 사용자 정의 복사 메서드를 구현할 수 있습니다. 이 두 메서드는 각각 얕은 복사 및 전체 복사 작업을 구현합니다.
__deepcopy__() 메서드는 복사 프로세스 중에 이전에 발견된 객체를 추적하는 데 사용되는 사전 방문을 사용해야 합니다.
__deepcopy__() 메서드의 경우 구현에 포함된 다른 deepcopy() 메서드(있는 경우)에 방문을 전달하는 것 외에
에서 추가 작업을 수행할 필요가 없습니다.
클래스가 피클 모듈에서 사용하는 __getstate__() 및 __setstate__() 메서드를 구현하는 경우 복사 모듈은
이러한 메서드를 사용하여 복사본을 생성합니다.
예:
>>> a = [[1], ['a'], ['A']]
>>> ; 복사 가져오기
>>> b = copy.deepcopy(a)
>>b
['a '], ['A']]
>>> c = copy.copy(a)
>>>c
[[ 1], ['a'], ['A']]
>>>a[1].append('b')
>>> a
[[1], ['a', 'b'], ['A']]
>>>b
[[1 ], ['a'], ['A']]
>>>c
[[1], ['a', 'b'], [' A']]
다음 사항에 유의해야 합니다.
(1) 복사 모듈은 정수 및 문자열과 같은 단순 유형에 사용되지만 거의 필요하지 않습니다.
(2) 이러한 복사 함수는 모듈, 클래스 객체, 함수, 메서드, 역추적, 스택 프레임, 파일, 소켓 및 기타 유사한 유형에서는 작동할 수 없습니다.
객체를 복사할 수 없으면 copy.error 예외가 발생합니다.
위 내용은 Python의 복사 모듈(얕은 복사 및 깊은 복사)에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!