inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)

일급함수 - 클로저 심화(3-2)

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

325

김백현

작성한 질문수 4

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는 변화하는 것과 관련이 있는 것인가요?

django python

답변 1

0

좋은사람

좋은 질문입니다.

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

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

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

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

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

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

진도미확인 (진도가 안 넘어감)

0

51

1

RuntimeError: There is no current event loop in thread 'MainThread'

0

95

1

chapter 07-01 실행 오류

0

78

1

Chapter05-04 : sum_func의 합이 이중 출력됩니다.

0

90

2

45. 병렬성 2 - Futures(5-1) wait가 의도된 대로 동작하지 않습니다.

0

109

2

멀티스레딩 - 44. 병렬성 1 - Futures(4-2)

0

81

2

chapter05_02 클로저 질문사항 !

0

61

1

LV1 설정

0

95

2

매직 메소드의 호출 방법 차이 문의

0

140

2

왜 numbers리스트를 만들때 str으로 숫자를 감싸나요?

0

106

2

스크랩핑 실습 중 Mac OS 인증서 문제

0

137

1

AsyncIO 멀티 스크랩핑 실습 예제 관련 질문

0

178

1

강의자료가 영상과 다릅니다

0

262

2

closure.cell_contents 초기화 하기 문의

0

139

2

map함수 사용 시, list변환 방법 문의

0

353

2

__mul__ 백터 * 숫지, 백터 * 백터 처리

0

150

1

del처리후 질문입니다.

0

163

1

car_list(car1,car2,car3) 인스턴스 tuple 타입 문의

0

235

1

coroutine에 대한 질문

0

251

1

제너레이터 이터레이터 질문이 있습니다.

0

258

1

atom install package search not working

0

283

1

Magic Method - Not Implemented

0

405

1

가상환경 질문!

0

410

1

병렬처리 추가 질문이 있습니다.

0

254

1