2014-06-22 1 views
4

목록을 추가하려고하면 어떻게됩니까?목록을 자신에 추가하면 어떻게됩니까?

# Let's say empty list is created. 
some_list = [] 
# Now, append it with self 
some_list.append(some_list) 
# Output shows [[...]] on iPython console. 

이것은 무엇을 의미합니까? some_list이 재귀 목록이 되나요? 참조 횟수가 some_list 인 경우 어떻게됩니까? 가비지 컬렉터가이를 어떻게 처리할까요? 이 some_list가 가비지 수집 될 때?

+2

* some_list가 재귀 목록 또는 기타 항목이 될 수 있습니까? 가비지 컬렉터는 순환 참조를 처리합니다. –

답변

7

예, 순환 참조를 만들었습니다. 목록 개체 자체를 참조합니다. 즉, 참조 횟수가 1 개의 추가 참조로 올라갑니다.

파이썬 가비지 수집기가이 경우를 처리합니다. 아무도 목록 개체를 더 이상 참조하지 않으면 가비지 수집기 프로세스가 해당 원을 끊을 책임이 있습니다.

>>> import gc 
>>> some_list = [] 
>>> gc.get_referents(some_list) 
[] 
>>> some_list.append(some_list) 
>>> some_list[0] is some_list 
True 
>>> gc.get_referents(some_list) 
[[[...]]] 
+0

똑같은 것은'Dict'에서도 잘 작동합니까? 그래서, 일반적으로 파이썬에서 변경 가능한 모든 데이터 구조가 있습니까? –

+0

예, 사전을 포함하여 자체 유형을 참조 할 수있는 모든 항목에 적용됩니다. –

+0

고마워요 @Martijn Pieters. –