얼마 전에 “사랑하지 않으면 떠나라”의 서평 제목으로는 좀 독특한 “당신은 자바 가상 머신을 죽일 수 있나요?”라는 글을 보고 떠올라서, 혹시 파이썬을 쓰다가 발생하는 문제를 얼마나 잽싸게 해결하고, 문제가 생길만한 코드를 짜지 않는 등 이해정도와 관련된 것을 시험해 볼 수 있는 문제를 한 번 내 봤습니다. -ㅇ-;; 물론 제가 냈기 때문에 제가 아는 한에서만 나온거라 좀 편향돼 있을 수도 있지만.. 그냥 재미로 한 번;;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
1. 다음 파이썬 타입 중에서 "일반적으로" 큰 수를 다룰 수 있는 순서대로 정렬하세요. decimal.Decimal int/long float (inf 제외) str (36진법으로 풀어 쓴다) 2. 다음 파이썬 타입 중에서 해시가 불가능한 타입을 모두 고르세요. unicode float set decimal.Decimal dict 3. 다음 중 최대 메모리 사용량이 가장 많은 코드를 고르세요. (ㄱ) max([i for i in range(1000)]) (ㄴ) max([i for i in xrange(1000)]) (ㄷ) max(i for i in range(1000)) (ㄹ) max(i for i in xrange(1000)) 4. 부모 클래스에서 __x(self) 메쏘드가 있을 때, 자식 클래스에서 부모 클래스가 정의된 소스코드를 수정하지 않고 호출할 수 있는 방법을 가능한 한 다양한 방법으로 쓰세요. 5. pymalloc을 넣고 컴파일했을 때 발생하는 현상이 아닌 것은? (ㄱ) 할당한 메모리보다 더 많이 할당된다. (ㄴ) 같은 루틴을 반복할 경우 메모리가 샐 수도 있다. (ㄷ) 할당된 객체가 쓰는 메모리를 해제해도 남아있을 수도 있다. (ㄹ) 메모리 할당이 더 느려질 수도 있다. 6. 다음 중 메모리 할당 횟수가 가장 많은 코드는? (ㄱ) map(int, range(100)) (ㄴ) map(str, range(100)) (ㄷ) map(long, range(100)) (ㄹ) map(unicode, range(100)) 7. exec "x ** y" 를 실행 할 때 발생할 수 있는 예외가 가장 아닐 "것 같은" 것은? NameError OverflowError MemoryError TypeError RuntimeError TabError ZeroDivisionError 8. 모듈을 들여오는 과정과 관련된 모듈 또는 객체가 아닌 것을 고르세요? (파이썬 2.x 기준) sys.path zipfile imp warnings marshal sys.modules __future__ 9. x += x 했을 때 할당된 메모리 크기가 변하지 않을 수도 있는 초기 x 값을 모두 고르세요? (ㄱ) sys.maxint (ㄴ) [1, 2] (ㄷ) 'guido' * 10 (ㄹ) True (ㅁ) sys.version 10. 다음 중 키보드 입력(ctrl-c)으로 중단할 수 있는 것를 모두 고르세요? (ㄱ) select.select (ㄴ) 9 ** 9999 (ㄷ) os.listdir (ㄹ) Decimal(9) ** 9999 (ㅂ) deque().add 11. CPython VM을 죽일 수 있는 파이썬 코드를 3가지 방법 이상 작성해 보세요. 12. 다음 중 오버라이딩으로 동작을 "바꿀" 수 있는 경우를 모두 고르세요? (ㄱ) not A (ㄴ) A is B (ㄷ) A = B (ㄹ) A != B (ㅁ) A <- B (ㅂ) A and B (ㅅ) A | B (ㅈ) (A, B) 13. 상속 받은 자식 클래스에서 단순하게 메쏘드를 오버라이드 했을 경우에도 베이스 클래스에서 "강제로" 자기 메쏘드를 부르게 하고 싶을 때 쓸 수 있는 방법 몇 가지? 14. gc.collect()가 해결할 수 없는 문제는? (ㄱ) 순환 참조 (ㄴ) C모듈의 전역 변수 (ㄷ) C객체의 멤버 변수 (ㄹ) C객체 간의 순환 참조 15. x += y를 실행했는데 ImportError가 발생했다. 어떤 상황일까? 가설을 5개 이상 생각해 보세요. 16. x = y를 실행했는데 TypeError가 발생했다. 어떤 상황일까? 가설을 2개 세워 보세요. 17. if list(x): raise SystemExit 했더니 프로그램이 종료했다. 어떤 상황일까? 가설을 5개 세워 보세요. 18. def x(a, b):에 대해서 x(1, 2)했는데 TypeError가 난다. 어떤 상황일까? 가설을 5개 세워 보세요. 19. import os; os.listdir('.') 했더니 AttributeError가 난다. 어떤 상황일까? 가설을 3개 세워 보세요. 20. print x하면 0인데 if x: print "Yay!" 하면 Yay!한다. 어떤 상황일까? 가설을 3개 세워 보세요. |
정답을 애타게 기다리고 있어요 ^^
일단 처음 열 문제만 풀어서 대강 올렸습니다. 맞는지는 보장 못 함 -_-;
http://mearie.org/journal/2008/02/inside-python-quiz
으악! 너무 어렵삼~ ㅠㅠ
와.. 토_끼군 대단해요! 제가 생각한 것보다 훨씬 자세하게 문제를 풀이했네요. 🙂 8번 빼고는 모두 제 생각과 일치하는 것 같네요. 8번에서 zipfile은 사실 import에는 관여하지 않고 zipimport가 자체적으로 구현했어요. warnings는 __future__ 경고 때문에 관련이 직접적은 아니더라도 좀 있다고 볼 수 있죠. ^_^; __future__자체는 상대경로 임포트를 의도하고 쓰면서 함정(?)으로 팠는데, 기막히게 피하셨군요 =3=3
정말 “두루” 이해하는데 도움이 되겠네요..
그런데.. 꽤나 어렵군요..
퍼키군: __future__를 함정으로 파다니… 어차피 블로그에서 맨날 광고하시던 거! =3=33 그나저나 zipimport가 zipfile을 안 쓰고 zlib만 쓴다면 흠좀 무섭군요.
20번은 2.5.2에서 고쳐진 그건가보네요.
엇 아니다 착각했다;
(VM을) 사랑하기 때문에 죽여야 하는건가요.
사랑이 이렇게 슬픈것이였군요. 흑흑 =33
어제 풀다 만 거 대강이라도 정리해서 2편으로 올렸습니다. 어려움… orz
http://mearie.org/journal/2008/02/inside-python-quiz-2
2번과 3번 정도 말고는 직접 해보지 않으면 잘 모르겠군요…;;;;