> 백엔드 개발 > 파이썬 튜토리얼 > Python의 복사 작업과 복사 모듈의 얕은 복사 및 전체 복사 방법

Python의 복사 작업과 복사 모듈의 얕은 복사 및 전체 복사 방법

WBOY
풀어 주다: 2016-07-22 08:56:37
원래의
1484명이 탐색했습니다.

프로그램에서 개체를 복사해야 하는 경우가 종종 있습니다.

a = [1, 2, 3]
b = a

# [1, 2, 3]
print b 

로그인 후 복사

복사되었으나 이제 첫 번째 요소의 값을 5로 변경해야 합니다

b[0] = 5 

# [5, 2, 3]
print b 

# [5, 2, 3]
print a 

로그인 후 복사

b의 첫 번째 요소 값을 변경했는데 a의 값도 변경되었습니다. 이는 Python에서 =가 a와 b가 동일한 목록을 가리키기 때문에 목록을 변경하면 위와 같은 결과가 발생하기 때문입니다. .

해결책은 슬라이싱입니다

a = [1, 2, 3]
b = a[:]
b[0] = 4

# [1, 2, 3]
# [4, 2, 3]
print a
print b

로그인 후 복사

하지만 중첩 목록의 경우에는 시도해 보세요

a = [[1,2,3], 4, 5]
b = a[:]
b[1] = 0 

# [[1,2,3], 4, 5]
# [[1,2,3], 0, 5]
print a
print b

로그인 후 복사

그렇습니다! 문제 없습니다. 중첩된 목록 요소를 사용해 보겠습니다

a = [[1,2,3], 4, 5]
b = a[:]
b[0][0] = 5

# [[5,2,3], 4, 5]
# [[5,2,3], 4, 5]
print a
print b
b = a[:]

로그인 후 복사

스틸 복사의 값은 개체만 복사하고 하위 요소는 복사하지 않습니다.

복사 모듈

복사 모듈은 개체를 복사하는 데 사용됩니다. 이 모듈은 매우 간단하며 각각 얕은 복사와 전체 복사를 나타내는 copy.copy 및 copy.deepcopy라는 두 가지 주요 메서드만 제공합니다. 얕은 복사(shallow copy)와 깊은 복사(deep copy)는 무엇입니까? 인터넷에는 엄청난 양의 정보가 있으므로 여기서는 자세히 설명하지 않겠습니다. 복사 작업은 복합 개체에서만 작동합니다. 간단한 예를 사용하여 이 두 가지 방법을 각각 소개합니다.

얕은 복사는 개체 자체만 복사하며 개체가 참조하는 개체는 복사하지 않습니다.

#coding=gbk
import copy
l1 = [1, 2, [3, 4]]
l2 = copy.copy(l1)
print l1
print l2
l2[2][0] = 50
print l1
print l2
로그인 후 복사

결과:

[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4]]
[1, 2, [50, 4]]
로그인 후 복사

같은 코드라도 전체 복사를 사용하면 결과가 다릅니다:

import copy
l1 = [1, 2, [3, 4]]
l2 = copy.deepcopy(l1)
print l1
print l2
l2[2][0] = 50
print l1
print l2
로그인 후 복사

결과:

[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4]]
로그인 후 복사

복사 기본 동작 변경

클래스를 정의할 때 __copy__ 및 __deepcopy__ 메서드를 정의하여 복사의 기본 동작을 변경할 수 있습니다. 다음은 간단한 예입니다.

class CopyObj(object):
  def __repr__(self):
    return "CopyObj"
  
  def __copy__(self):
    return "Hello"
obj = CopyObj()
obj1 = copy.copy(obj)
print obj
print obj1

로그인 후 복사

결과:

CopyObj
Hello
로그인 후 복사
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿