모의고사 1회 3번문제
강의좀 올려주세여.ㅠㅠ
이해안가는 부분이 너무 명확해여.
그래서 오히려 이문제는 다른 문제까지 헷갈리게 만드는거같아여.
이문제를 푸는 사람들이면 같은 생각할꺼입니다.
그리고 자료 pdf 는 단어 검색이 안돼서. 궁금한
파트를 명시적으로 찾기가 어려워요.
답변 3
0
안녕하세요, 해당 문제는 리스트라는 것이 하나의 객체라는 것을 인식해야합니다.
핵심 개념 중 하나인 가변 기본값(mutable default argument)에 대해서 설명드립니다.
def build(v, bucket=[]):
이 코드에서 bucket=[]는 함수를 호출할 때마다 새로 만들어지는 것이 아닙니다. def build(...)라는 문장이 실행되는 시점, 즉 함수가 정의되는 순간에 []가 딱 한 번만 생성됩니다. 이후 bucket 인자를 넘기지 않고 호출하면, 그때마다 새 리스트가 아니라 이미 만들어진 그 하나의 리스트를 계속 재사용합니다.
비유하자면, 선생님이 책상에 분필 통 하나를 놔두고 "분필 없으면 이거 쓰라"고 한 것과 같습니다. 학생들은 각자 새 통을 받는 게 아니라 모두 같은 통을 공유합니다. 한 학생이 통에 분필을 넣고 가면, 다음 학생이 왔을 때도 그 통에는 그 분필이 그대로 들어있습니다.
또한 리스트 변수는 값 자체가 아니라 리스트라는 상자를 가리키는 이름표와 같습니다. 따라서 bucket 인자를 생략하고 호출한 결과를 받는 변수들은 모두 같은 상자를 가리키는 서로 다른 이름표일 뿐입니다. 반면 build(7, [])처럼 직접 새 리스트를 넘기면, 그것은 기본값 상자와 무관한 완전히 별개의 새 상자가 됩니다.
한 줄씩 추적
a = build(2) 기본 상자(처음엔 빈 리스트)를 사용합니다.
item = [2]bucket이 비어있으므로if bucket은 거짓 → extend 실행 안 됨bucket.append(item)→ 기본 상자는[[2]]가 됨a는 이 기본 상자를 가리킴
b = build(5) 같은 기본 상자(현재 [[2]])를 다시 사용합니다.
item = [5]bucket이 비어있지 않으므로if bucket은 참bucket[-1]은[2]→ 마지막 원소는2len(bucket)은1item.extend([2, 1])→item = [5, 2, 1]bucket.append(item)→ 기본 상자는[[2], [5, 2, 1]]b도 같은 기본 상자를 가리킴
c = build(7, []) 새 빈 리스트를 직접 넘겼으므로 기본 상자와 무관합니다.
item = [7],bucket이 비어있으므로 그대로 appendc = [[7]](독립적인 상자)
d = build(3) 다시 기본 상자(현재 [[2], [5, 2, 1]])를 사용합니다.
item = [3]bucket[-1]은[5, 2, 1]→ 마지막 원소는1len(bucket)은2item.extend([1, 2])→item = [3, 1, 2]bucket.append(item)→ 기본 상자는[[2], [5, 2, 1], [3, 1, 2]]d도 같은 기본 상자를 가리킴
결론: a, b, d는 서로 다른 변수처럼 보이지만 실제로는 동일한 상자를 가리키므로, 최종적으로 세 변수 모두 [[2], [5, 2, 1], [3, 1, 2]]를 참조합니다.
출력 계산
print(len(a), sum(a[-1]))a = [[2], [5, 2, 1], [3, 1, 2]]
len(a)→3a[-1]=[3, 1, 2],sum→6→ 3 6
print(len(c), c[0][0])c = [[7]]
len(c)→1c[0][0]→7→ 1 7
print(sum(sum(x) for x in d))d = [[2], [5, 2, 1], [3, 1, 2]]
sum([2]) = 2sum([5, 2, 1]) = 8sum([3, 1, 2]) = 6총합:
2 + 8 + 6 = 16→ 16
최종 출력
3 6
1 7
16
참고
실무에서는 이런 예상치 못한 공유 상태를 방지하기 위해 가변 객체를 기본값으로 직접 쓰지 않고, 다음과 같이 작성하는 것이 일반적입니다.
def build(v, bucket=None):
if bucket is None:
bucket = []
...
0
안녕하세요, 인프런 AI 인턴입니다. yundevil님.
모의고사 관련하여 이해가 어려운 부분이 있다고 하셔서 강의 자료 및 PDF 자료의 검색성에 대해 문의 주셨네요. 모의고사 문제 해결은 기본 개념 숙지 후에 문제 풀이가 필요하므로, 강의에서 강조된 부분을 중점적으로 복습하시면 이해가 좀 더 수월할 수 있습니다.
아래 유사한 질문과 답변들을 확인하여 강사님께서 제공하신 팁과 자료 제공 여부 등 도움이 될 만한 정보를 안내드립니다.
-
- 이 답변에서는 PDF 자료 제공에 대한 강사님의 안내를 확인할 수 있습니다. 역시, 상세 내용을 PDF로 제공하며 검색 기능이 부족할 수 있지만, 강사님은 자료의 시각화 및 정리를 통해 문제 해결을 돕고자 합니다.
- 이 답변에서는 PDF 자료 제공에 대한 강사님의 안내를 확인할 수 있습니다. 역시, 상세 내용을 PDF로 제공하며 검색 기능이 부족할 수 있지만, 강사님은 자료의 시각화 및 정리를 통해 문제 해결을 돕고자 합니다.
-
- 이론 문제의 파일 제공에 대한 요청 및 강사님의 준비 계획에 대한 정보를 받으실 수 있습니다. 이론과 요약 내용도 함께 준비하고 있음을 언급하고 있습니다.
- 이론 문제의 파일 제공에 대한 요청 및 강사님의 준비 계획에 대한 정보를 받으실 수 있습니다. 이론과 요약 내용도 함께 준비하고 있음을 언급하고 있습니다.
자료의 검색성 향상을 위해 키워드별로 앞서 설명한 강의 포인트를 노트에 따로 정리하시는 것도 유익할 수 있습니다. PDF의 경우, 현재 제공된 자료가 관련 키워드와 함께 잘 연계될 수 있도록 강사님께 추가적인 개선 요청을 해보시면 좋겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
배열 포인터 출력 표시
0
19
1
포인터 증감 또는 값 증감
0
17
1
배열 포인터 함수 관련
0
17
1
실기 이론 통합 요약본 버전
0
23
1
업캐스팅 3번 문제 예시
0
29
2
push pop 설명 되어있는 강의가 몇강인가요?
0
46
1
모의고사 파일오류
1
76
3
모의고사 다운
0
52
1
업캐스팅 원칙
0
65
2
6분46초
0
57
2
공략법
0
65
1
모의고사 파일과 이론파일 업데이트
1
74
3
이론 pdf 다운은 어디서 하나요?
0
72
2
13분 40초
0
64
2
정보처리기사 26년 실기 2회 네트워크 부분
0
77
2
기출문제 재탕
0
57
1
뻬먹은 코드
0
47
1
기출문제 재탕
0
37
0
모의고사1회 2번문제 뭔지 모르겠네요 강의올려주시면안될까요?
0
51
1
영상 다운로드는 안되나요?
0
81
1
26년2회 실기기출은 언제쯤...
0
126
2
이론 공부법 요약본 버전 업데이트 문의
0
108
2
정처기 필기 준비할때 이 이론을 다시 외워도 될까요?
0
115
2
조건 반복문 질문: for 문 ?
0
92
1





