11
"파이썬 프로그래밍"을위한 입문용 텍스트 How to think like a computer scientist을 읽었습니다.리스트에 적용된 곱 연산자 (데이터 구조)
목록에 적용 할 때 곱 연산자 (*
)의 동작을 명확히하고 싶습니다.
def make_matrix(rows, columns):
"""
>>> make_matrix(4, 2)
[[0, 0], [0, 0], [0, 0], [0, 0]]
>>> m = make_matrix(4, 2)
>>> m[1][1] = 7
>>> m
[[0, 0], [0, 7], [0, 0], [0, 0]]
"""
return [[0] * columns] * rows
함수 make_matrix을 고려
[[0, 7], [0, 7], [0, 7], [0, 7]]
make_matrix의 정확한 버전이다
def make_matrix(rows, columns):
"""
>>> make_matrix(3, 5)
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> make_matrix(4, 2)
[[0, 0], [0, 0], [0, 0], [0, 0]]
>>> m = make_matrix(4, 2)
>>> m[1][1] = 7
>>> m
[[0, 0], [0, 7], [0, 0], [0, 0]]
"""
matrix = []
for row in range(rows):
matrix += [[0] * columns]
return matrix
이유 이유 (9.8에서이 책에 설명 된대로)
가 ... 각 행은 다른 행의 별명이 있다는 것이다 make_matrix의 첫 번째 버전은
가 궁금 ... 실패하는 이유
[[0] * columns] * rows
는 ... 각 행은 다른 행의 별칭입니다 ...
하지만
을 원인 7백45경1천5백15조5백36억9천1백36만3천2백10[[0] * columns]
즉 행의 각 행 [0]
다른 소자의 별명없는 이유.