본문 바로가기
알고리즘 및 코딩/[코딩] 기타(리눅스, 주의사항)🌐

[파이썬] list를 호출할 때 주의할 것

by kks2 2023. 5. 11.
728x90

모델 코딩을 하다가 뭔가가 잘 안되서 봤더니 파이썬의 요상한 성질 때문인 것 같다. 

다른 사람은 이 문제를 보고 잘 피해서 코딩하시길..

 

아래는 문제사항을 간단하기 정리해 본 것이다. 

아래와 같은 코드에서 결과는 무엇일까?

# Case 1
S= [[1,2,3],[2,3,4],[5,5,5]]
for x in S:
	 x = [1,2,3]
print(S)

의도한 바는 [[1,2,3], [1,2,3], [1,2,3]] 이다. 

하지만 결과는 원래 정의한 대로 [[1, 2, 3], [2, 3, 4], [5, 5, 5]] 가 나왔다. 

 

하지만 내가 이렇게 짠 이유는 아래와 같은 상황에선 x가 복사가 아니라 그 위치에 가는 것처럼 행동했기 때문이다. 

# Case 2
S= [[1,2,3],[2,3,4],[5,5,5]]
for x in S:
	 x[0] = 3
print(S)

위와 같은 상황에선 [[3, 2, 3], [3, 3, 4], [3, 5, 5]] 이렇게 3으로 변경되어 나온다. 

 

휴 왜 그런지는 정확히는 모르겠지만, 어째든 이를 해결하기 위해서 Case 1코드를 아래와 같이 변경했다. 

그러니까 의도한 대로 잘 나온다. 

# Case 1 - edit
S= [[1,2,3],[2,3,4],[5,5,5]]
for i in range(len(S)):
	 S[i] = [1,2,3]
print(S)

 

728x90