-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
예시문제 질문
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
TeamLab
지식공유자2019.03.29
list와 int 변수의 차이인데요. list는 기본적으로 list안에 있는 element의 메모리 주소 값을 가지고 있습니다. 그래서 eggs.append 라는 명령은 그 주소 값에서 더한다라는 의미이므로 기존 메모리에서 하나가 추가됩니다.
그러나 eggs = [xxx] 하는 순간 새로운 주소값이 할당 되기 때문에 기존에 같은 주소를 가르키고 있던 값이 사라지게 됩니다.
답변 1