변수 선언하기
1. 변수 정의
컴퓨터 언어에서 변수(variable)이란 데이터를 저장할 수 있는 이름이 붙은 공간을 말합니다. 특정한 데이터를 변수로 지정해 두면 이 데이터를 재사용 할 수 있어 코드가 효율적이고, 의미있는 이름을 부여 했을 때 코드의 가독성이 좋아지는 장점이 있습니다. 파이썬에서 변수 지정은 = 문자를 사용합니다. (변수 이름 = 변수에 저장할 값)
변수를 선언했을 때 일어나는 일에 대해 조금 더 자세히 알아보겠습니다.
a = [1,2]
a라는 변수에 [1,2] 라는 리스트 타입의 데이터를 입력했다고 합시다. 그럼 [1,2]의 값은 메모리에 저장이 되고, 변수 a는 [1,2]라는 값이 저장된 메모리의 주소를 가지게 됩니다. 실제 a가 가리키는 주소는 id 함수를 사용해 확인할 수 있습니다.
id(a)
1606658924416
2. 리스트 데이터 복사하기
리스트 데이터를 이용해 변수의 개념에 대해 조금 더 자세히 알아봅시다. 만약 a를 아래와 같이 정의하고, a를 다시 b라는 변수에 입력하면 a, b가 동일한 값을 갖는 것을 알 수 있습니다.
a = [1,2]
b = a
print(a)
print(b)
[1, 2]
[1, 2]
그런데 a, b의 주소를 보면 두 변수의 주소가 동일함을 알 수 있습니다.
1606658851136
1606658851136
이것은 b = a 라는 명령어를 실행했을 때 a의 값인 [1,2]가 새롭게 정의 되어 새로운 메모리에 저장되는 것이 아닌, a가 가르키고 있는 주소가 b에 그대로 반영된다는 의미입니다. 즉 a와 b는 완전히 동일하며, [1,2]라는 리스트를 참조하는 변수가 2개가 된 것입니다. 따라서 만약 a=[1,2] 에서 요소 값 하나를 수정하게 된다면, 당연히 b도 동일하게 변경이 됩니다.
a[0]=5
print(a)
print(b)
[5, 2]
[5, 2]
만약에 a, b가 동일한 값을 가지되, 서로 다른 주소를 가지려면 어떻게 해야 하는지 알아봅시다. 이를 위해서는 a의 리스트를 복사해서 새로운 주소를 할당 받도록 해야 합니다. 리스트를 복사할 때는 copy 명령어를 이용합니다.
from copy import copy
a = [1,2]
b = a
c = copy(a)
print(id(a))
print(id(b))
print(id(c))
1606658553664
1606658553664
1606658552064