2013-02-11 5 views
0

필자는 파이썬 인터프리터를 열고 코드를 작성하고 다음 함수를 실행했습니다.왜 함수가 더 긴 목록을 반환합니까?

>>> def crazy_function(my_list=[]): 
...  my_list.append(0) 
...  return my_list 
... 
>>> crazy_function() 
[0] 
>>> crazy_function() 
[0, 0] 
>>> crazy_function() 
[0, 0, 0] 
>>> crazy_function() 
[0, 0, 0, 0] 
>>> crazy_function() 
[0, 0, 0, 0, 0] 
>>> crazy_function() 
[0, 0, 0, 0, 0, 0] 
>>> crazy_function() 
[0, 0, 0, 0, 0, 0, 0] 
>>> 

무슨 일입니까? 왜 함수를 호출할수록 함수에 의해 리턴 된리스트는 점점 길어지는 걸까요? 함수가 호출 될 때마다 새 로컬 목록을 만들어야하지 않습니까?

+0

파이썬 개시 : D – dangerChihuahua007

+4

이 많이 요구됩니다 - [파이썬에서 "최소 깜짝": 변경이 용이 한 기본 인수] 참조 (http://stackoverflow.com/questions/1132941/least-astonishment-in-python를 -the-mutable-default-argument) –

+0

이 질문들은 항상 닫힙니다. * SO FAST *. 인상적이다. – mgilson

답변

2

변경 가능한 개체를 함수 인수의 기본값에 할당하는 것은 일반적인 오류입니다. documentation 인용 : 함수 정의 실행 인 경우

기본 파라미터 값이 평가된다. 이것은 표현식이 함수가 정의 될 때 한 번 평가되고 동일한 "사전 계산 된"값이 각 호출에 대해 으로 사용됨을 의미합니다. 기본 매개 변수가 목록이나 사전과 같이 변경 가능한 개체 인 경우를 이해하는 것이 특히 중요합니다. 함수가 개체를 수정하는 경우 (예 : 목록에 항목을 추가하여) 기본값이 실제로 수정됩니다. . 이것은 일반적으로 의도 된 바가 아니며 입니다.

관련 문제