백준 스도쿠 문제를 풀고있을 때 한가지 신기한 사실을 알게됨
graph=[1,2,3]
answer=None
def 어쩌구():
answer=graph
graph[0]=2
print(answer)
내예상 : 1,2,3
실제 출력 : 2,2,3
그 이유는 다음과 같음
파이썬에서 리스트나 딕셔너리 같은 가변 객체를 다른 변수에 할당할 때 실제 값을 복사하는 것이 아니라 해당 객체의 주솟값을 전달함. 그래서 해당 객체 내의 값을 변경하면 똑같이 변수의 값도 변경되는 것.
하지만 다음과 같은 경우는 좀 다르다.
graph=[1]
answer=graph
graph=[2]
print(answer)
다음과 같은 경우는 graph는 새로운 리스트 객체를 참조하게 되고 answer는 그대로 원래 객체였던 graph객체를 참조하기 때문에 answer의 값이 변하지 않는다.