반응형
배열 생성 방법
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 |
|---|