정보처리기사 실기PythonPython - 클래스와 매직 메서드난이도 5SHORT_ANSWER

정보처리기사 실기 Python - 클래스와 매직 메서드 기출문제 #313

문제

다음 Python 코드의 실행 결과를 쓰시오.

Python
class Matrix: def __init__(self, data): self.data = data def __matmul__(self, other): return Matrix([x + y for x, y in zip(self.data, other.data)]) def __imatmul__(self, other): self.data = [x * y for x, y in zip(self.data, other.data)] return self def __str__(self): return str(self.data) a = Matrix([1, 2, 3]) b = Matrix([4, 5, 6]) c = a print(a @ b) a @= b print(a) print(c)

정답

[5, 7, 9] [4, 10, 18] [4, 10, 18]

[5, 7, 9] [4, 10, 18] [4, 10, 18][5, 7, 9][4, 10, 18][4, 10, 18]

해설

매직 메서드 __matmul__과 __imatmul__의 동작 차이를 이해해야 한다. 1) a @ b는 __matmul__를 호출하여 새로운 Matrix 객체를 생성하므로 [1+4, 2+5, 3+6] = [5, 7, 9] 2) a @= b는 __imatmul__를 호출하여 기존 객체를 in-place로 수정하므로 a.data가 [14, 25, 3*6] = [4, 10, 18]로 변경 3) c는 a와 같은 객체를 참조하므로 a가 변경되면 c도 동일한 결과 [4, 10, 18]을 출력한다.

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.