Python의 복사 모듈(얕은 복사 및 깊은 복사)에 대한 심층적인 이해
파이썬에서는 복사 모듈을 주로 소개합니다.
복사 모듈에는 목록, 튜플, 사전 및 사용자 정의 개체의 인스턴스를 포함하여 복합 개체의 깊은 복사본과 얕은 복사본을 생성하는 기능이 포함되어 있습니다.
########
복사(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

Python의 Pandas 라이브러리를 사용할 때는 구조가 다른 두 데이터 프레임 사이에서 전체 열을 복사하는 방법이 일반적인 문제입니다. 두 개의 dats가 있다고 가정 해

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

정규 표현식은 프로그래밍의 패턴 일치 및 텍스트 조작을위한 강력한 도구이며 다양한 응용 프로그램에서 텍스트 처리의 효율성을 높입니다.

Uvicorn은 HTTP 요청을 어떻게 지속적으로 듣습니까? Uvicorn은 ASGI를 기반으로 한 가벼운 웹 서버입니다. 핵심 기능 중 하나는 HTTP 요청을 듣고 진행하는 것입니다 ...

이 기사는 Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask 및 요청과 같은 인기있는 Python 라이브러리에 대해 설명하고 과학 컴퓨팅, 데이터 분석, 시각화, 기계 학습, 웹 개발 및 H에서의 사용에 대해 자세히 설명합니다.

파이썬에서 문자열을 통해 객체를 동적으로 생성하고 메소드를 호출하는 방법은 무엇입니까? 특히 구성 또는 실행 해야하는 경우 일반적인 프로그래밍 요구 사항입니다.
