• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

왜 list에 append를 하는 것은 쓰기로 간주되지 않는 것인가요?

21.07.17 22:19 작성 조회수 186

2

"왜 list에 append를 하는 것은 '쓰기'로 간주되지 않는 것인가요?"

-------------------------------------------------------

리스트일 때는 error가 발생하지 않고, 일반변수일 때는 error가 발생하는 이유가 도대체 무엇인가요?

정말로 존경을 담아서 말씀드리건대 입문강의에서 지금 이 강의까지 매번 감동의 물결 속에서 감사히 들어왔습니다만, 이번 강의에서 이 의문과 관련된 부분은 도무지 이해가 가지를 않습니다. 너무 답답해서 처음으로 질문 올립니다.

2분 36초에서 "위에거를 참조하지 못하고 있는 거예요"라고 하시는데, 그렇다면 클로저 심화(3-1)에서 나온 closure_ex1() 함수에서는 어떻게 내부함수 averager 안에서 series.append(v)를 할 때 '위에거(series = [])'를 참조할 수 있는 것인가요?

바꿔 말하면,
"왜 closure_ex1() 함수에서는, 내부함수 averager에서  nonlocal series 라고 선언하지 않았음에도 불구하고, error 없이 정상적으로 실행되는 것인가요?"

클로져 심화(4-2) 질의응답란에는 "local에서는 nonlocal의 변수를 '읽기'만 가능하고 '쓰기'는 불가능하다"고 설명해주고 계신데요, (nonlocal에 있는) list에 (local에서) append를 하는 것은 '쓰기'가 아닌가요?

이 이슈와 관련하여 질문하는 모든 사람들이 scope의 개념은 선생님에게 설명을 듣고 또 충분히 이해하고 있으나,

list에 append를 하는 것이 '쓰기'로 간주되지 않는 이유에 대해서는 설명을 듣지 못하고 있습니다.

그래서 다시금 한번 더 여쭤보자면,
"왜 list에 append를 하는 것은 '쓰기'로 간주되지 않는 것인가요?"

이것까지 답해주시다보면 너무 깊이 들어가기 때문에, 배려 차원에서 의도적으로 말씀을 안 해주시는 것인가요?

혹시, 이것은
a = [0] -> id(a) -> a.append(3) -> id(a)
b = 3 -> id(b) -> b += 3 -> id(b)
a의 id는 변하지 않고, b의 id는 변화하는 것과 관련이 있는 것인가요?

답변 1

답변을 작성해보세요.

0

좋은 질문입니다.

자료구조를 공부해야 하는 이유이기도 해요

nonlocal <-> local 영역은 기존 id값은 변하지 않고 데이터 추가의 개념으로 이해하시면 됩니다.

즉, 리스트 안에 다음 데이터 영역의 주소 값만 추가 된다고 생각하시면 될 것 같습니다.

https://realpython.com/python-append/

위에 링크를 번역해서 꼼꼼히 읽어보세요.

append 순간 메모리 구조까지 아주 자세히 설명되어 있습니다.