[Python/배열을 생성하는 방법]

2024. 3. 18. 23:15·잡동사니
반응형

배열 생성 방법

python 에서 2차원 배열을 생성하는 방법 두가지가 있다.

# case 1
graph1 = [[0]*10]*10

>> [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
 
 # case 2
 graph2 = [[0]*10 for _ in range(10)]
 
 >> [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

 

일반적으로 #case1은 거의 쓰이지 않는다.

 

1. [[0]*10]*10: 이 방법은 외부 리스트의 각 요소가 동일한 리스트 객체를 참조하고 있기 때문에 문제가 발생할 수 있다. 즉, 하위 리스트를 수정하면 외부 리스트의 해당 행이 변경된다.

 

2. [[0] * 10 for _ in range(10)]: 이 코드는 각각 다른 하위 리스트를 생성하여 10x10 배열을 만든다. 내부적으로 10개의 서로 다른 리스트를 생성하므로 각 행이 서로 독립적이다. 내부의 값을 수정하더라도 다른 값에 영향을 미치지 않는다.

 

실제로 확인 해보자.

 

#case1

print(id(graph1[0]))
print(id(graph1[1]))

>>2709076585152
>>2709076585152
  • #case1 방법으로 생성한 배열이다. 각 행의 주소를 확인해보니 같은 값임을 알 수 있다.
graph1[0][0] = 1

print1(graph)

>>[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
  • 2차원배열의 0행 0열에 접근하여 값을 1로 바꿔주니, 모든 행의 1열 값이 변경된 것을 알 수 있다.

 

#case2

print(id(graph2[0]))
print(id(graph2[1]))

>>2709076575936
>>2709076307008
  • #case2 방법으로 생성한 배열이다. 각 행의 주소를 확인해보면 다른 값임을 알 수 있다.
graph2[0][0] = 1

print(graph2)

>>[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
  • 2차원배열의 0행 0열에 접근하여 값을 1로 바꿔주어도, 다른 행의 값은 변경되지 않는다.
반응형

'잡동사니' 카테고리의 다른 글

[LaTeX] 벡터 이미지 넣는 법  (0) 2024.02.20
'잡동사니' 카테고리의 다른 글
  • [LaTeX] 벡터 이미지 넣는 법
hangyuwon
hangyuwon
  • hangyuwon
    191
    hangyuwon
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (38)
      • 기타 (1)
      • Stanford CS231n (19)
      • 논문 리뷰 (5)
      • Error (4)
      • 알고리즘 (2)
      • Linux (1)
      • 잡동사니 (2)
      • 딥러닝 (4)
  • 인기 글

  • 태그

    논문 리뷰
    error
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hangyuwon
[Python/배열을 생성하는 방법]
상단으로

티스토리툴바