:: 게시판
:: 이전 게시판
|
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다. 통합 규정을 준수해 주십시오. (2015.12.25.)
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
21/12/26 19:53
non_list.clear() 에서 문제가 발생하는 것 같습니다.
일단 non_list = []로 바꾸면 정상적으로 작동합니다. 아무래도 append로 인해 같은 주소를 참조하게 되는데 그 내용을 clear로 날리게 되어 문제가 발생 한 게 아닐까 싶습니다.
21/12/26 20:30
윗분 말씀대로 current에 들어간 non_list를 clear()해버리기 때문에 발생하는 현상입니다.
아래처럼 non_list를 clear 하지 마시고 for 문 안에서 새로 생성해버리시면 해결 될겁니다. pt1 = [2,3] pt2 = [1,2] def segment(p1, p2): current = [] for i in range(1,5): non_list = [] a = 1 / i b = 1 - a for j in range(len(p1)): r = p1[j] * a + p2[j] * b non_list.append(r) current.append(non_list) return current print(segment(pt1,pt2))
21/12/26 23:32
핵심은 리스트가 mutable한 객체이기 때문입니다. 이거랑 얕은 복사, call by object reference에 대해서 더 검색해보세요.
current에 추가된 non-list가 값으로 전달된 것이 아니라 객체 참조로 전달 되어서, current에 있는 리스트와 기존의 non-list는 같은 리스트가 됩니다. 그러니 clear를 하면 같이 제거가 되지요.
|