파이썬 객체 이동 및 복사

파이썬 객체

  파이썬은, 모든 객체입니다. 조성물의 식별자 (신원), 종류 (유형)의 값 (치) : 각 개체로 구성된다.

고유 전형적 컴퓨터 메모리 어드레스의 객체에 적용 사용되는 객체 식별자를 식별한다. 객체 OBJ를 식별하는 내장 기능 ID (OBJ) 수익률을 사용.

또한 타입이 아닌 가변보다 물체에 속하는 것으로 양해. 그리고 두 개체는 "변경할 수 있습니다"(변경 가능)와 "불변"(불변) 개체가 있습니다. 파이썬에서, 문자열, 튜플, 그리고 번호는 변경 될 수 있으며, 목록, 딕셔너리 등이 변경 될 수있는 개체 수 없습니다.

파이썬 전송

  전송 파이썬 참조로 전달된다. 변수 오브젝트에 대한 참조, 변수는 객체의 메모리 어드레스를 유지했다.

  파이썬은 동적 언어입니다. 변수는 개체 참조 변수에 따라 선언 타입 (형식)을 표시 할 필요가없는, 파이썬 자동 데이터 유형을 결정한다.

  파이썬 각 개체는 데이터 유형이, 만 지원 업무의 유형을 지원, 강력한 형식의 언어입니다.

  스택에 저장된 변수는 스택 (OBJ)의 메모리 어드레스에 저장된다. A의 저장된 OBJ 더미 입니다. 이 힙 OBJ 유지 : 값, 유형, ID (메모리 주소).

  

 

 

   불변의 객체

  불변 오브젝트 내의 오브젝트 변수 및 오브젝트를 가리키는 새로운 변수가 물체에 적용되지 때 서로 독립적이다.

A = " 123 " 
, B = = " XYZ " 인쇄 (a)
 인쇄 (b)

인쇄 결과는 "XYZ" "123"입니다. 도 상기 메모리 제어. 파이썬 변수가 레이블입니다 이유를 설명. B = A는 A = XYZ, 그것은 "XYZ"개체에 등록한 것과 같이 가변 태그 (본질적 새로운 메모리 어드레스 A에 할당 된 때). 원래 "123"는 점 (123), 새로운 객체 점 XYZ에 두 개의 탭과 B, B가있다. 이러한 객체는 불변 (문자열, 튜플, 숫자)는 것을 전제로해야합니다.

   개체 변수

  가변 객체 (목록, 딕셔너리, 집합)에서, 만약 직접 전류 오브젝트를 동작 할 수있다. 그리고 새로운 변수의 복사본의 복사본이되지 않습니다.

= A [. 1,2 ,. 3 ] 
B = 
A [0], A [ . 1], A [2] =. 4 ,. 5 ,. 6 // 원래리스트의 요소 변경
 >>> 
[ . 4 ,. 5 ,. 6 ]
 >>> B 
[ . 4 ,. 5 ,. 6]

얕은 대 전체 복사

  얕은 사본

    불변의 유형의 경우, 얕은 복사 사본의 메모리 주소, 새로운 메모리 공간을 열 수 없습니다.

    가변형 들어, 얕은 복사가 새로운 메모리 영역을 개방한다 (단지 최상위 새로운 공간을 열었다, 소자 어드레스의 내층은 여전히 ​​동일하다). 서브 소자 어드레스는 여전히 동일한 (공유 신구 표적 서열)이다.

    얕은 복사 한 후, 소자 형의 원래 목적 변수 값의 변경, 또한 객체의 복사본에 영향을 주어, 원래 값을 불변 객체 타입 요소 영향은 원래 형태를 변경.

    

  

  깊은 사본

    浅拷贝,除了顶层拷贝,还对子元素也进行了拷贝(本质上递归浅拷贝)。

    经过深拷贝后,原始对象和拷贝对象所有的元素地址都没有相同的了(对于不可变对象指向相同的地址空间,可变对象序列内存地址就不同了)。

 

오기 복사 =. 1,2 ,. 3 ,. 4 [ ' ' , ' B ' ] # 원래 객체 
B = A #의 참조 할당, 전송 오브젝트 
C = copy.copy (A) #의 객체의 복사본 얕은 사본 
copy.deepcopy = D (a) #의 객체의 복사본 깊은 복사본 
(a.append . 5) #은 객체 수정 
이 [ . 4]으로 .Append ( ' C ' ) # 수정이 [ 'A', 'B'의 개체 ] 개체 목록 인쇄 ( ' A = ' , A)
 인쇄 ( ' B = ' , B)
 인쇄




( ' C = ' , c)
 인쇄 ( ' D = ' , d)
 인쇄 (ID (a))
 프린트 (ID (c))
 프린트 (ID (d))

결과 :

 

 

 

 

 

 

추천

출처www.cnblogs.com/sometingintheway/p/11965418.html