2017-05-19 2 views
1

인스턴스화 된 동일한 클래스의 1000 개의 다른 객체가 있다고 가정하고 키가 1에서 1000까지이고 그 값이 1000 객체 인 사전에이 객체를 할당한다고 가정합니다.파이썬에서 실제로 메모리를 차지하는 것은 무엇입니까?

이제 튜플 (obj1, 1), (obj2,2) 등의 다른 사전을 만듭니다. obj는 동일한 1000 개의 개체입니다. 그리고 그 값은 1에서 1000입니다.

1000 개의 개체가 각 사전의 키와 값에 있기 때문에 메모리 사용량이 두 배가된다는 것을 의미합니까?

그렇지 않아야합니다. 우리는 새로운 객체를 생성하지 않기 때문에 동일한 객체에 참조를 할당하는 것입니다. 따라서 값이나 키 (튜플의 일부)와 같은 객체를 가진 1000 개의 유사한 사전을 사용할 수 있으며 메모리 사용량이 크게 증가하지는 않습니다.

맞습니까?

+4

개체 자체를 복사 할 필요는 없지만 각 개체에 대한 포인터를 만들어야합니다 (뒤에서). 객체가 작 으면 실제로 "메모리 사용이 크게 증가합니다". –

+1

http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables – Lanting

+0

@aryamccarthy하지만 이러한 객체에 대한 포인터는 가볍기 때문에 왜 크게 증가할까요? – user1008636

답변

1

개체는 복사되지 않고 참조됩니다.

개체가 작은 경우 (예 : 정수) 튜플 목록이나 dict의 오버 헤드가 중요합니다.

개체가 크면 (예 : 매우 긴 고유 문자열) 개체의 크기에 비해 오버 헤드가 훨씬 적기 때문에 다른 dict/same 목록 작성으로 인해 메모리 사용량이 크게 증가하지 않습니다 사물.

관련 문제