모의고사 1회 3번문제
강의좀 올려주세여.ㅠㅠ
이해안가는 부분이 너무 명확해여.
그래서 오히려 이문제는 다른 문제까지 헷갈리게 만드는거같아여.
이문제를 푸는 사람들이면 같은 생각할꺼입니다.
그리고 자료 pdf 는 단어 검색이 안돼서. 궁금한
파트를 명시적으로 찾기가 어려워요.
Câu trả lời 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의 경우, 현재 제공된 자료가 관련 키워드와 함께 잘 연계될 수 있도록 강사님께 추가적인 개선 요청을 해보시면 좋겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
정보처리기사 실기 26년 2회 SRT 스케줄링 문제 단위 질문
0
16
1
유튜브(정보처리기사 실기 | 26년 2회 기출문제 코드 해설)
0
19
1
262 정처기 실기 C언어코딩
0
12
0
정보처리기사 262 실기 Hash(해시) 질문
0
22
2
static 변수 질문입니다.
0
23
2
파이썬 4강 질문입니다.
0
28
2
41강 30:10
0
37
2
이론 공부법 질문 있습니다.
0
60
2
부모의 생성자 관련 질문
0
36
2
시험지 문제에 필기해도 되나요?
0
39
3
41강 11:23
0
35
2
4강파이썬 질문입니다
0
31
2
try-catch 핸들러명
0
37
2
36강 3:48
0
51
2
35강 18:27
0
45
2
자식 코드 내 super() 생략
0
49
2
출력질문
0
63
2
31강 4:06
0
51
2
파이썬 학습자료가 강의 자료와 다릅니다.
0
78
3
섹션 2 - 9강 강의자료 다운로드 문제
0
63
3
29강 3:09
0
45
2
28강 6:42
0
52
2
22강 17:33
0
48
2
75강 26년 1회 코드 문제 해석 강의 질문 드립니다.
1
59
2

