15990번 - 1, 2, 3 더하기 5
문제를 풀다가 아무리 생각해도 이상한 동작이 발견되어서 질문합니다.
파이썬 고수분들...도와주세요
p = [[0 for _ in range(4)] for i in range(n+1)] 이 코드와
p = [[0,0,0,0]] * (n+1) 코드의 차이점이 뭔가요?
둘 다 [0,0,0,0] 를 n+1개 가지는 2차 배열 아닌가요?
print해보니 둘 다 같은 길이의 같은 값을 갖는 배열인데....
p = [[0 for _ in range(4)] for i in range(n+1)] 을 하니 답이 나오고
p = [[0,0,0,0]] * (n+1) 를 하니 오답처리가 됩니다.
이상함을 느끼고 파고들어가보니 다음과 같은 현상이 발생합니다.
밑의 코드에서는 p[0]와 p[5], p[6]은 할당 조차 하지않았는데 ( 처음에 0으로 초기화 한 건 제외 )
print(p)를 해보니 떡~하니 할당이 되어있습니다. 이거 왜이러는 걸까요?
정상입니다. 두번째에서는 초기에 모든 [0,0,0,0]이 하나의 리스트를 가리킵니다.
shallow copy 검색해보세용
댓글을 작성하려면 로그인해야 합니다.
gus8054 2년 전
문제를 풀다가 아무리 생각해도 이상한 동작이 발견되어서 질문합니다.
파이썬 고수분들...도와주세요
p = [[0 for _ in range(4)] for i in range(n+1)] 이 코드와
p = [[0,0,0,0]] * (n+1) 코드의 차이점이 뭔가요?
둘 다 [0,0,0,0] 를 n+1개 가지는 2차 배열 아닌가요?
print해보니 둘 다 같은 길이의 같은 값을 갖는 배열인데....
p = [[0 for _ in range(4)] for i in range(n+1)] 을 하니 답이 나오고
p = [[0,0,0,0]] * (n+1) 를 하니 오답처리가 됩니다.
이상함을 느끼고 파고들어가보니 다음과 같은 현상이 발생합니다.
밑의 코드에서는 p[0]와 p[5], p[6]은 할당 조차 하지않았는데 ( 처음에 0으로 초기화 한 건 제외 )
print(p)를 해보니 떡~하니 할당이 되어있습니다. 이거 왜이러는 걸까요?