new_list = [[0] * 3] * 3
new_list[0][0] = 1
new_list[0][0] = 1
2D 리스트를 하나 초기화 해놓고
맨 위의 맨 왼쪽 하나를 1로 만들려고 했거든??????????
근데 시발 맨 왼쪽 전부가 1로 바뀌더라
1 0 0
1 0 0
1 0 0
이렇게
초보 도움좀 ㅠㅠ
2D 리스트를 하나 초기화 해놓고
맨 위의 맨 왼쪽 하나를 1로 만들려고 했거든??????????
근데 시발 맨 왼쪽 전부가 1로 바뀌더라
1 0 0
1 0 0
1 0 0
이렇게
초보 도움좀 ㅠㅠ
와 스택오버플로 검색해보니까 *가 레퍼런스 복사하는거였네 좆될뻔했누
내가 그래서 리스트 할떄 * 잘 안씀
nested list에서 * 쓰는건 안좋은 습관이라고 오버플로 따거들이 알려줌 ㅇㅇ. [[0]*N for i in range(N)] 이거 쓰라고 하시네
>>> import copy >>> lst = [0,0,0] >>> new_list = [copy.deepcopy(lst) for _ in range(3)] >>> new_list [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> new_list[0][0] = 1 >>> new_list [[1, 0, 0], [0, 0, 0], [0, 0, 0]]
넘파이가 편함 >>> import numpy as np >>> lst = np.zeros((3,3)) >>> lst[0][0] = 1 >>> lst array([[1., 0., 0.], [0., 0., 0.], [0., 0., 0.]])
땡큐 저녁 맛난거 묵어