파이썬 : 깊은 복사 얕은 복사, 메모리 관리

깊고 얕은 복사 사본 카피 개체 차이는 어드레스, 복사 또는 어드레스의 복사본의 값 사이의 차이 인 객체 및 객체의 원래 아웃의 복사본인지 여부를 본질적이다.

변수 개체 : 직접 변경할 값의 의미 내에서 객체의 주소, 여전히이 주소를 차례로 개체입니다.

불변의 객체 : 객체가 가리키는 주소 값은 변경이 객체의 값이 주소 변경을 가리키는 경우 수정할 수 없습니다.

깊은 복사 할 수있는 아무것도 완전히 전에, 그리고 원래 개체 변화는 현재 오브젝트에 영향을주지 않습니다 어떻게

변경된 요소의 목록에서 현재 오브젝트도 원래의 목적에 영향을 미치지 않을 경우 원래 오브젝트리스트 엘리먼트 변경 얕은 복사 한 후, 현재의 오브젝트를 변경한다.

 

메모리 관리

파이썬 메모리 관리기구는기구 카운터기구 가비지 컬렉션 혼합에 대한 참조

메모리에서 트랙 개체를 유지하기 위해 내부 파이썬 사용 참조 횟수가 내부 파이썬은 객체가 더 이상 필요하지 않은 참조 객체는 참조 카운트를 생성하기 위해 만들어졌습니다 즉 참조 횟수, 수를 기록 객체,이 객체 레퍼런스 카운트는 쓰레기 제로이다.

참조 카운트 플러스 1의 경우에있는 개체를 요약하면 :

1. 오브젝트가 생성된다 : X = 4

2. 또 다른 사람이 작성 : Y = X를

3 함수에 파라미터로서 전달된다 foo는 (X)

대상으로 4. 컨테이너 요소 A = [1, X, '33 ']

어디 참조 횟수 감소

1. 로컬 참조가 본 발명의 범위를두고있다. 함수의 끝에 상기 예 foo는 (X)는 감소된다 객체 참조 가리키는 X.

델 X 또는 Y 델 2. 별명 개체를 명시 적 파괴

3. 별명 객체가 다른 객체에 할당 : X = 789

4. 객체는 윈도우 객체에서 제거됩니다 : myList.remove (X)

델으로 myList를, 또는 윈도우 객체 자체가 범위를 벗어나 : 윈도우 객체 자체가 파괴됩니다.

쓰레기 수거

1, 메모리가 그들을 청소 넣어 것 가비지 컬렉터 중 일부에서 더 이상 사용하는 경우. 이 참조가 개체 0 카운트 확인하고 메모리에 공간을 확보합니다. 그들 자신은 숫자 0에 다른 참조왔다, 두 객체가 서로를 참조하는 경우 : 물론, 참조 카운트에 추가로 상황이 가비지 컬렉터를 멀리 지워집니다이 제로가 해제된다.

도 2는, (a, 그 결과 참조하는 절대 0 카운트 기준 B, B 참조) 원형 기준 물체의 분리를 보장하기 위하여 가비지 콜렉션주기 가비지 수집기가있다.

파이썬에서, 많은 경우에 이러한 응용 프로그램의 메모리는 개체를 만들 수 없기 때문에 응용 프로그램 메모리의 작은 조각, 메모리, 애플리케이션 후이 작은 메모리, 곧 출시 될 예정이며, 더 메모리 개체 수준이 없습니다 메커니즘을 풀링. 파이썬 다수의 운전 중에 조작의 malloc 무료을 수행한다는 수단이 사용자 모드 심각 파이썬의 효율성에 영향을 미칠 것이다 커널 모드 간의 빈번한 전환. 파이썬의 효율성을 촉진하기 위해, 파이썬은 작은 메모리 응용 프로그램과 자료의 관리를위한 메모리 풀 메커니즘을 소개했다.

메모리 풀 메커니즘

파이썬은 메모리의 가비지 컬렉션을 제공하지만 운영 체제에 반환보다는 메모리 풀에 메모리를 필요가 없습니다.

파이썬 모두 미만 256 바이트가 디스펜서를 사용하여 구현 pymalloc 있으며, 큰 물체의 malloc 시스템이 사용되는 개체. 같은 정수, 부동 소수점 및 목록 등 또한 파이썬 객체에서 객체가 메모리 풀을 공유하지 않는 사이의 별도의 개인 메모리 풀을 가지고있다. 이러한 캐싱을위한 메모리의 정수, 할당하고 정수의 큰 숫자를 놓으면 것을이 방법은 플로트에 할당 할 수 없습니다.

 

추천

출처www.cnblogs.com/xiao-longxia/p/12607870.html