PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2021/12/26 19:29:51
Name 민트초코우유
Subject [질문] 파이썬 코딩 질문드립니다.
안녕하세요 피식인여러분

파이썬 코딩 뉴비입니다. 아래처럼 코드를 써보다가 도저히 이해가 안되서 질문 올립니다.

pt1 = [2,3]
pt2 = [1,2]

def segment(pt1, pt2):
    current = []
    non_list = []
    for i in range(1,5):
        a = 1/i
        b = 1-1/i
        for j in range(len(pt1)):
            r = pt1[j]*a+pt2[j]*b
            non_list.append(r)
        current.append(non_list)
        non_list.clear()
    return current
print(segment(pt1,pt2)

위와 같은 코드를 실행하면 current가 [[], [], [], []]으로 출력됩니다.

원래의 의도는 non_list에 [x1,y1]을 저장하고 이 리스트를 current에 보낸 뒤 다시 다시 non_list를 비우고 [x2,y2]를 만든 뒤 이 리스트를

current에 보내는 작업을 반복함으로써 [[x1,y1],[x2,y2],...,[x4,y4]]를 만드는게 목표입니다.

그런데 함수의 결과값으로 공란이 나오는게 이해가 안됩니다 흑흑





통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
구리구리TM
21/12/26 19:53
수정 아이콘
non_list.clear() 에서 문제가 발생하는 것 같습니다.
일단 non_list = []로 바꾸면 정상적으로 작동합니다.
아무래도 append로 인해 같은 주소를 참조하게 되는데 그 내용을 clear로 날리게 되어 문제가 발생 한 게 아닐까 싶습니다.
민트초코우유
21/12/28 22:51
수정 아이콘
주소참조 개념을 생각하지 못했네요 흐...
NULLPointer
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/28 22:52
수정 아이콘
말씀대로 하니까 제대로 돌아갑니다 흑
피지알유저
21/12/26 21:30
수정 아이콘
주소 참조만 해놓고 해당 주소의 집을 없애면 나중에 참조한 주소 찾아가도 집이 없는게 당연하지요.
민트초코우유
21/12/28 22:53
수정 아이콘
그냥 무지성으로 코드를 넣다보니 생각이 짧았네요 따흑
사이먼도미닉
21/12/26 23:32
수정 아이콘
핵심은 리스트가 mutable한 객체이기 때문입니다. 이거랑 얕은 복사, call by object reference에 대해서 더 검색해보세요.

current에 추가된 non-list가 값으로 전달된 것이 아니라 객체 참조로 전달 되어서, current에 있는 리스트와 기존의 non-list는 같은 리스트가 됩니다. 그러니 clear를 하면 같이 제거가 되지요.
민트초코우유
21/12/28 22:53
수정 아이콘
덕분에 질문 이상으로 더 배워갑니다~!
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
160682 [질문] 스마트 티비 연결 질문입니다. [4] 호아킨6714 21/12/28 6714
160681 [질문] [디아블로2] 벡스룬 5개로 자룬 교환 가능할까요? [2] 고기반찬7672 21/12/28 7672
160680 [질문] 드래곤퀘스트 11 플스 or 스위치 [7] Gotetz8551 21/12/28 8551
160679 [질문] 노웨이홈 보기전 영화 뭐보고가야하나요 [12] 듣는사람6081 21/12/27 6081
160678 [질문] 닌텐도 젤다 한번 해볼까 하는데 무엇을 사면되나요? [14] 유니꽃7597 21/12/27 7597
160677 [질문] 케이블tv 해지하신 분들 불편한 점 없으신가요? [4] 기억의습작5741 21/12/27 5741
160676 [삭제예정] 직장생활 팀원 인사에 대해 질문이 있습니다. [7] 삭제됨7015 21/12/27 7015
160675 [질문] 삼쩜삼이라는 곳 믿을만한가요? [22] 한이연8928 21/12/27 8928
160674 [질문] 이거 무슨 게임일까요? [2] 착한글만쓰기7340 21/12/27 7340
160673 [질문] 12/31 - 1/1 서울 여행 갈려고 하는데 루트 및 음식점 추천 부탁드립니다 메타몽7241 21/12/27 7241
160672 [질문] 31일날 구파발, 연신내, 불광 일대에 갈만한 레스토랑 추천 해주실수 있을 까요? [11] 키스도사5511 21/12/27 5511
160671 [질문] 디즈니 플러스 자막 개선됐나요? [8] Winter_SkaDi7683 21/12/27 7683
160670 [질문] 연금저축 계좌가 연금저축펀드 계좌인가요? [6] GgNu6148 21/12/27 6148
160669 [질문] 위쳐 3 모드(W3EE) 제외하고 추천부탁드립니다. [3] 잘생김용현5698 21/12/27 5698
160668 [질문] 디비니티2 하는데, 이거 대사 다 읽어야 하나요? [13] 지식의 저주7930 21/12/27 7930
160667 [질문] 해외직구 배송대행 서비스 이용에 대해 질문이 있습니다. [2] 삭제됨6702 21/12/27 6702
160666 [질문] 손 건봉합술 수술 이후 질문입니다 [4] kaerans9059 21/12/27 9059
160665 [질문] 아파트 탑층 괜찮을까요? [12] 무로이10656 21/12/27 10656
160664 [질문] 강남쪽 애프터눈티 괜찮은 곳 있을까요? [2] L'OCCITANE6921 21/12/27 6921
160663 [질문] 눈썹칼 사용 질문 (얼굴 주의) [16] Lord Be Goja9514 21/12/27 9514
160662 [질문] 주말 운동 추천해주세요 [11] 글쓴이8092 21/12/27 8092
160661 [질문] 노트10플러스 이거 버그인가요? [6] 도라지6895 21/12/27 6895
160660 [질문] 아파트 관리비 그냥 계좌이체 해버렸는데 [8] 호아킨10362 21/12/27 10362
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로