문제
다음 Python 코드의 실행 결과를 쓰시오.
Pythondef transform(data, target={}): key = len(data) if key in target: target[key].append(data) else: target[key] = [data] return target print(transform('ab')) print(transform('xyz')) print(transform('w', {})) print(transform('mn'))
정답
{2: ['ab']} {2: ['ab'], 3: ['xyz']} {1: ['w']} {2: ['ab', 'mn'], 3: ['xyz']}
{2: ['ab']}
{2: ['ab'], 3: ['xyz']}
{1: ['w']}
{2: ['ab', 'mn'], 3: ['xyz']}
해설
가변 기본 인자 함정 문제입니다. target={} 기본 인자는 함수 정의 시 한 번만 생성되어 호출 간 공유됩니다. 첫 번째 호출에서 길이 2인 'ab'가 {2: ['ab']}를 만들고, 두 번째 호출에서 길이 3인 'xyz'가 추가되어 {2: ['ab'], 3: ['xyz']}가 됩니다. 세 번째 호출은 새로운 딕셔너리를 전달했으므로 독립적으로 {1: ['w']}를 반환합니다. 네 번째 호출은 다시 공유된 기본 딕셔너리를 사용하여 길이 2인 'mn'이 기존 키 2에 추가됩니다.