핵심 SET 01 — 정답 및 해설¶
| 문항 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 정답 | ② | ④ | ④ | ③ | ② | ② | ② | ① | ① | ② |
1. 정답 ② [1] 다음 [1, 2]
기본값 리스트 lst=[]는 함수가 정의될 때 딱 한 번만 생성되어 호출마다 재사용됩니다. 첫 호출에서 [1]이 되고, 두 번째 호출에서 같은 리스트에 2가 추가되어 [1, 2]가 됩니다.
2. 정답 ④ UnboundLocalError
함수 안에서 x = 5로 대입이 한 번이라도 있으면 파이썬은 x를 함수 전체에서 지역변수로 취급합니다. 따라서 print(x) 시점에는 아직 지역변수 x가 만들어지기 전이라 UnboundLocalError가 발생합니다.
3. 정답 ④ 3
count는 클래스 변수로 모든 인스턴스가 공유합니다. __init__이 호출될 때마다 Counter.count += 1이 실행되어 객체 3개를 만들면 3이 됩니다.
4. 정답 ③ NameError
from math import sqrt는 sqrt만 가져오고 math라는 이름 자체는 가져오지 않습니다. 따라서 math.sqrt(16)에서 math를 찾을 수 없어 NameError가 발생합니다.
5. 정답 ② {'x': 3, 'y': 2}
딕셔너리 리터럴에 같은 키가 중복되면 마지막 값이 이전 값을 덮어씁니다. "x": 1은 "x": 3에 의해 덮어써집니다.
6. 정답 ② [[1, 0, 0], [1, 0, 0]]
[[0]*3] * 2는 같은 내부 리스트를 참조하는 2개의 칸을 만듭니다. grid[0][0] = 1로 수정하면 두 행이 같은 객체를 가리키므로 둘 다 바뀝니다.
7. 정답 ② (1, [2, 3, 5], 4)
튜플 자체는 불변이지만, 내부에 들어있는 리스트는 가변 객체이므로 append로 내용을 바꿀 수 있습니다. 튜플의 슬롯이 바뀌는 게 아니라 그 슬롯이 가리키는 리스트의 내용이 바뀌는 것입니다.
8. 정답 ① {3, 4} {1, 2}
&는 교집합(a와 b 둘 다 있는 값) → {3, 4}. -는 차집합(a에는 있지만 b에는 없는 값) → {1, 2}.
9. 정답 ① [1] [2] [1, 3]
첫 호출 f(1)은 b를 넘기지 않아 기본값 리스트(이하 D)를 사용 → D.append(1) → D = [1]. 두 번째 호출 f(2, [])는 새 리스트를 직접 넘겼으므로 D와 무관하게 [2]만 만들어지고 D는 그대로 [1]. 세 번째 호출 f(3)은 다시 D를 사용 → D.append(3) → D = [1, 3]. 핵심은 기본값 리스트는 인자를 생략한 호출끼리만 누적되고, 직접 새 리스트를 넘긴 호출은 영향을 주지도 받지도 않는다는 점입니다.
10. 정답 ② NameError
import utils.math_utils는 utils라는 이름만 현재 네임스페이스에 바인딩합니다. math_utils라는 이름 자체는 만들어지지 않으므로 math_utils.add(...)처럼 직접 쓰면 NameError가 발생합니다. 올바르게 쓰려면 utils.math_utils.add(2, 3)이라고 써야 합니다.