새벽_나그네
12시 지난 새벽
새벽_나그네
전체 방문자
오늘
어제
  • 분류 전체보기
    • TIL
    • DevLog
    • Algorithm
    • ComputerScience
    • etc

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • machine learning
  • 코딩프로젝트
  • 국비지원
  • Selenium 4
  • 코딩
  • portfolio
  • 스파르타코딩클럽
  • 내일배움단
  • 내일배움캠프
  • 프로그래머스
  • 내일배움카드
  • AI트랙
  • Github
  • 코린이
  • docker
  • 개발일지
  • 자기주도학습
  • til
  • TodayILearned
  • Python

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
새벽_나그네

12시 지난 새벽

[파이썬 자료형] 2차원 배열 선언
DevLog

[파이썬 자료형] 2차원 배열 선언

2022. 7. 10. 17:12

오늘 아침에 모닝 알고리즘을 풀면서 겪었던 경험에 대한 기록이다.

 

2차원 배열을 선언해야 하는 문제가 있어서 배열을 선언하는 중에 모든 배열의 값에 0을 넣어두고 시작하는 방식으로 구성하게 되었다.

1차원 배열을 선언하고 초기화 하는 과정을 생각해보았을 때 

rows = 10

arr =[0]*rows 이런 방식의 문법을 사용했던 것을 생각하여 밑의 방식과 같이 2차원 배열을 선언 

 

rows =5
cols = 3
arr = [[0]*cols] *rows

행과 열에 0을 넣어두고 arr[0][0]의 위치에 값을 1로 치환하려고 하였으나 여기서 문제가 발생하였다.

밑의 모습과 같이 1행 1열의 값에만 1이 들어가는 것이 아니고 모든 1열의 값에 1이 들어가는 현상이 발생

해당 문제는 * 연산자를 이용해서 배열을 선언하게 되면 얕은 복사(shallow copy)가 진행되게 되어서 발생하는 문제라고 하며 이것은 즉 배열 내의 요소들이 같은 객체를 가리키게 되는 것이다. 따라서 2차원 배열로 구성되어있어서 첫 행의 객체라고 생각했던 arr [0][0]이 모든 객체를 바라보는 모습이 되는 것이므로 선언의 방법부터 다시 생각하고 선언하는 것이 필요하다.

 

올바른 방법

2차원 배열을 올바른 방식으로 선언하게 되려면 for문을 사용해서 선언을 해주면 되겠다. 수 많은 알고리즘 문제 해결에도 해당 방식을 사용해왔지만 위와 같은 방식도 문제가 없다고 착각한 나의 실수였고 올바른 방식은 밑을 참고하도록 한다.

rows = 10
cols = 5

arr = [[0 for j in range(cols)] for i in range(rows)]

 

실수로 인한 작은 해프닝이었지만 배열 선언을 할때 꼭 신경 써야 하는 부분으로 생각된다.

 

저작자표시 비영리 변경금지 (새창열림)

'DevLog' 카테고리의 다른 글

[WIL] 프리온보딩 두번째 과제 회고록 - 페이히어  (0) 2022.07.11
[WIL] 프리온보딩 첫번째 과제 회고록 - 랩큐  (0) 2022.07.11
[Unity 게임개발] Player character 변경과 장애물 변경관련 정리  (0) 2022.07.03
[Setting] pipenv 사용하기  (0) 2022.06.29
[DRF] 장고 REST Framework란? 그리고 Serialization  (0) 2022.05.04
    'DevLog' 카테고리의 다른 글
    • [WIL] 프리온보딩 두번째 과제 회고록 - 페이히어
    • [WIL] 프리온보딩 첫번째 과제 회고록 - 랩큐
    • [Unity 게임개발] Player character 변경과 장애물 변경관련 정리
    • [Setting] pipenv 사용하기
    새벽_나그네
    새벽_나그네
    IT, 프로그래밍, 정보, 스마트스토어

    티스토리툴바