while문 밖의 global 변수 적용문제
y=0
x=y

while y <= 10:
    print(x)
    y+=1

코드는 위와 같습니다.

제 생각에는
0~10까지 출력이 되야할 것 같은데 0만 출력이 됩니다.
x=y 이 부분이 왜 적용이 안될가요 이 부분을 while문 안에 넣으면
제 생각대로 0~10이 출력이 됩니다.
global 변수로 while문 밖에 선언 했을 때는 왜 안되는 건가요?

ckmmy65 244

M 2022년 7월 31일 10:17 오후

+1 while에 있는 y+=1 y구문이 x를 올려주는 값이 아니니까 그렇습니다. x=y를 while문 안에 넣으면 while문이 한번 반복될 때마다 x가 y값을 복사한 자료형이 됩니다. 총 11번 복사한다고 할 수 있겠네요. 반면, x=y가 외부에 있을 때는 0일 때 딱 한번만 복사되는 것이지, 서로 공유하지는 않습니다. 서로 값을 공유하는 경우는 리스트 같은 경우가 있겠네요. 명령어 print(id(x))를 통해 더 자세하게 아실 수 있습니다. 처음 x에 y값을 복사할 때는 똑같은 id값을 가지지만, y+=1 구문을 거친 후에는 서로 다른 id값을 가지게 됩니다. global 변수는 def문도 아니라서 굳이 사용할 필요가 없을 것 같은데 무엇을 말씀하시는 지 잘 모르겠군요, 제가 드린 해설이 도움이 되었으면 좋겠네요^^ - yunh2019님, M 2022년 8월 1일 11:22 오전 추천 , 대댓글
@yunh2019님 감사합니다. 오랜만에 프로그래밍을 해서 까먹었었는데 주소값 문제군요. 덕분에 기억도 나고 이해도 됐습니다. 감사합니다. - ckmmy65님, 2022년 8월 2일 9:36 오전 추천 , 대댓글
목록으로