[python] 이차원 이상의 리스트 복사

이차원 이상의 리스트 복사

일반적인 복사로 이중 리스트 복사가 되지 않는다. 따라서 이차원 이상의 리스트 복사하는 방법에 대해서 알아본다.

일반적인 방법을 사용했을때

일반 리스트를 복사할 때 주로 사용하는 방법은 .copy()[:] 를 이용하는 방법이다.

N =5
graph = [['R', 'R', 'R', 'B', 'B'], ['G', 'G', 'B', 'B', 'B'], ['B', 'B', 'B', 'R', 'R'], ['B', 'B', 'R', 'R', 'R'], ['R', 'R', 'R', 'R', 'R']]
graph1 = graph[:]

for i in range(N):
    for j in range(N):
        if graph1[i][j]=='R':
            graph1[i][j]='G'
# 위에서 graph1의 'R' 부분을 'G'부분으로 모두 바꿨다.
            
print(graph)
# [['G', 'G', 'G', 'B', 'B'], ['G', 'G', 'B', 'B', 'B'], ['B', 'B', 'B', 'G', 'G'], ['B', 'B', 'G', 'G', 'G'], ['G', 'G', 'G', 'G', 'G']]

print(graph1)
# [['G', 'G', 'G', 'B', 'B'], ['G', 'G', 'B', 'B', 'B'], ['B', 'B', 'B', 'G', 'G'], ['B', 'B', 'G', 'G', 'G'], ['G', 'G', 'G', 'G', 'G']]

해결 방법

copy moduledeepcopy를 사용하면 쉽게 해결된다.

N =5
graph = [['R', 'R', 'R', 'B', 'B'], ['G', 'G', 'B', 'B', 'B'], ['B', 'B', 'B', 'R', 'R'], ['B', 'B', 'R', 'R', 'R'], ['R', 'R', 'R', 'R', 'R']]
graph1 = copy.deepcopy(graph)

for i in range(N):
    for j in range(N):
        if graph1[i][j]=='R':
            graph1[i][j]='G'
# 위에서 graph1의 'R' 부분을 'G'부분으로 모두 바꿨다.
            
print(graph)
# [['R', 'R', 'R', 'B', 'B'], ['G', 'G', 'B', 'B', 'B'], ['B', 'B', 'B', 'R', 'R'], ['B', 'B', 'R', 'R', 'R'], ['R', 'R', 'R', 'R', 'R']]

print(graph1)
# [['G', 'G', 'G', 'B', 'B'], ['G', 'G', 'B', 'B', 'B'], ['B', 'B', 'B', 'G', 'G'], ['B', 'B', 'G', 'G', 'G'], ['G', 'G', 'G', 'G', 'G']]

출처