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)를 해보니 떡~하니 할당이 되어있습니다. 이거 왜이러는 걸까요?

azaraks   2년 전

정상입니다. 두번째에서는 초기에 모든 [0,0,0,0]이 하나의 리스트를 가리킵니다.

shg9411   2년 전

shallow copy 검색해보세용

댓글을 작성하려면 로그인해야 합니다.