• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

예시문제 질문

19.03.24 20:53 작성 조회수 100

1

def spam(eggs):

eggs.append(1)

print(ham, eggs)

eggs=[2,3] #기존의 eggs를 끊고 새로운 eggs를 만든다.

print(eggs)

ham=[0] # ham이라는 공간 안에 [0]가 있다.

spam(ham) # ham 이라는 공간을 eggs도 또한 가르키고 있다.

print(ham)

위 예시의 경우 ham공간에 [0]이 있고

spam(ham)하는 순간 [0]이 있는 공간을 ham과 eggs가 같이 가르키고

eggs.appen(1)하면 ham와 eggs가 동시에 가르키고 있는 공간에서 [0,1]이 되어

ham, eggs를 각각 프린트하면 같은 값이 나온다고 설명하셨는데

def test(t):

t=t+1

print(x,t)

t=20

print("In function:", t)

x=10

print("before:", x)

test(x)

print("after:", x)

강의의 다른 예시 문제를 변형해서 만들어 봤는데

이 경우도 마찬가지로 x라는 공간에 10이 있고, test(x)하는 순간

10이라는 공간을 x, t가 동시에 가르키고

t=t+1하면 10이 11이 되고

이를 x, t가 동시에 가르키고 있으니

print(x), print(t)를 하면 같은 값이 나와야 하는 것 아닌가요?

뒤에 변수의 scope 부분에서

x=10은 global 변수, t는 지역 변수라는 개념으로 설명을 할 수는 있는데

그러면 ham, eggs 문제가 global 변수, 지역변수 개념으로 설명이 안되네요.

감사합니다.

답변 1

답변을 작성해보세요.

1

list와 int 변수의 차이인데요. list는 기본적으로 list안에 있는 element의 메모리 주소 값을 가지고 있습니다. 그래서 eggs.append 라는 명령은 그 주소 값에서 더한다라는 의미이므로 기존 메모리에서 하나가 추가됩니다.

그러나 eggs = [xxx] 하는 순간 새로운 주소값이 할당 되기 때문에 기존에 같은 주소를 가르키고 있던 값이 사라지게 됩니다.