다차원 리스트 값 바꿀 때 여러 줄이 같이 바뀐다면¶
일반적으로 다차원 리스트에서 값을 변경할 때는 인덱스를 지정해 원하는 값을 넣어주면 된다.
In [21]:
x = [[3, 5, 6, 7],
[-3, 0, 4, 5],
[-9, 7, 8, 1]]
print(x)
[[3, 5, 6, 7], [-3, 0, 4, 5], [-9, 7, 8, 1]]
In [22]:
x[2][1] = 99
print(x)
[[3, 5, 6, 7], [-3, 0, 4, 5], [-9, 99, 8, 1]]
그러나 모든 값이 0인 3 * 4 리스트를 다음과 생성하니 하나의 값만 바꿨는데도 여러 줄의 값이 한꺼번에 바뀐 것을 볼 수 있다.
In :
y1 = [[0] * 4] * 3
print(y1)
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
In :
y1[2][1] = -99
print(y1)
[[0, -99, 0, 0], [0, -99, 0, 0], [0, -99, 0, 0]]
In [29]:
y2 = [[2, 4, 6, 8]] * 3
print(y2)
[[2, 4, 6, 8], [2, 4, 6, 8], [2, 4, 6, 8]]
In [30]:
y2[2][1] = -99
print(y2)
[[2, -99, 6, 8], [2, -99, 6, 8], [2, -99, 6, 8]]
이런 현상이 발생하는 이유는, 리스트를 만들때 동일한 리스트를 복사했기에 하나의 리스트에서 값을 변경하더라도 다른 줄의 리스트에서 그 값을 참조하기 때문이다.
for문으로 생성하는 경우에는 정상적으로 변경할 수 있다.
In [31]:
z = []
for i in range(3) :
z.append([2, 4, 6, 8])
print(z)
[[2, 4, 6, 8], [2, 4, 6, 8], [2, 4, 6, 8]]
In [32]:
z[2][1] = -99
print(z)
[[2, 4, 6, 8], [2, 4, 6, 8], [2, -99, 6, 8]]
물론 리스트 컴프리헨션도 가능하다.
In [33]:
z = [[2, 4, 6, 8] for i in range(3)]
print(z)
[[2, 4, 6, 8], [2, 4, 6, 8], [2, 4, 6, 8]]
In [34]:
z[2][1] = -99
print(z)
[[2, 4, 6, 8], [2, 4, 6, 8], [2, -99, 6, 8]]
'파이썬 팁' 카테고리의 다른 글
주피터 노트북에서 백준 입력 편하게 받기 (0) | 2023.01.31 |
---|---|
random 모듈 사용하기 (0) | 2023.01.03 |
파이썬 표준 라이브러리 itertools 사용하기 (2) (0) | 2022.12.06 |
파이썬 표준 라이브러리 itertools 사용하기 (1) (0) | 2022.12.05 |
dict 자료형 정렬하기 (0) | 2022.12.05 |
댓글