핵심 SET 02 — 정답 및 해설¶
| 문항 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 정답 | ① | ③ | ② | ② | ② | ② | ③ | ② | ③ | ② |
1. 정답 ① 5
함수의 매개변수 x는 지역변수로, 전역의 x와는 별개의 객체입니다. foo 안에서 x = x + 1은 지역변수 x만 바꿀 뿐 전역 x에는 영향을 주지 않습니다.
2. 정답 ③ 5
*args는 (1, 2, 3)으로 길이 3, **kwargs는 {"a": 1, "b": 2}로 길이 2. 3 + 2 = 5.
3. 정답 ② False True
==는 기본적으로 객체의 정체성(메모리상 동일 여부)을 비교합니다(별도로 __eq__를 정의하지 않았다면). p1과 p2는 다른 객체이므로 p1 == p2는 False. 반면 p1.x == p2.x는 둘 다 5라는 값을 비교하므로 True.
4. 정답 ② 5만 출력
if __name__ == "__main__": 블록은 모듈을 직접 실행할 때만 실행되고, import로 가져올 때는 __name__이 "calc"가 되어 실행되지 않습니다. 하지만 print(add(2, 3))은 if 블록 밖에 있으므로 import 시에도 항상 실행되어 5가 출력됩니다.
5. 정답 ② TypeError
딕셔너리의 키는 해시 가능(hashable)해야 합니다. 리스트는 가변 객체라 해시할 수 없으므로 키로 사용하면 TypeError: unhashable type: 'list'가 발생합니다.
6. 정답 ② [1, 2, [3, 4]] [1, 2, 3, 4]
append는 인자를 하나의 원소로 그대로 추가하므로 [3, 4]라는 리스트 자체가 통째로 들어갑니다. extend는 인자의 각 원소를 풀어서 추가하므로 3과 4가 따로 들어갑니다.
7. 정답 ③ <class 'int'> 다음 <class 'tuple'>
(5)는 괄호가 그냥 수식의 우선순위 괄호일 뿐이라 int입니다. 튜플을 만들려면 쉼표가 필요하므로 (5,)만 tuple이 됩니다.
8. 정답 ② <class 'dict'>
{}는 빈 딕셔너리를 만듭니다. 빈 집합(set)을 만들려면 set()을 명시적으로 호출해야 합니다.
9. 정답 ③ 80 100
r.energy = 80은 Robot 인스턴스 r에 새로운 인스턴스 속성을 만들어 클래스 속성을 가립니다(shadowing). 클래스 속성 Robot.energy는 그대로 100으로 남습니다.
10. 정답 ② utils 폴더에 __init__.py가 있어야 파이썬이 패키지로 인식한다
__init__.py는 내용이 비어 있어도 되며, 이 파일이 있어야 폴더가 패키지로 인식됩니다. string_utils.py는 패키지가 아니라 패키지 안의 모듈입니다.