■ 변수(variable)
변수란 어떤 값을 담는 상자이다.
예를 들어, a = 3이라고 하는 것은 "a라는 상자에 3이라는 숫자 자료를 담는다"는 의미이다. 그리고 이것을 우리는 "변수를 선언한다"라고 표현한다.
우리가 수학시간에 배운 등호 "="는 프로그래밍에서 "=="로 표현한다.
변수_이름 = 변수에_저장할_값
- 변수 a, b, c
>>> a = 1
>>> b = "python"
>>> c = [1,2,3]
다른 프로그래밍 언어인 C나 JAVA에서는 변수를 만들 때 자료형의 타입을 직접 지정해야 한다. 하지만 파이썬은 변수에 저장된 값을 스스로 판단하여 자료형의 타입을 지정하기 때문에 더 편리하다.
파이썬에서 사용하는 변수는 객체를 가리키는 것이라고 말할 수 있다. 객체란 자료형 데이터(값)와 같은 것을 의미한다. 만약 a = [1,2,3]이라고 하면 [1,2,3] 값을 가지는 리스트 데이터(객체)가 자동으로 메모리*에 생성되고 변수 a는 [1,2,3] 리스트가 저장된 메모리 주소를 가리키게 된다.
(* 메모리 : 컴퓨터가 프로그램에서 사용하는 데이터를 기억하는 공간)
(1) 변수 a가 가리키는 [1,2,3] 리스트의 주소 값
>>> a = [1,2,3]
>>> print(id(a))
3514956704000
(2) 변수 a와 같은 리스트를 가지는 변수 b의 주소 값
>>> a = [1,2,3]
>>> b = a
>>> print(id(a))
>>> print(id(b))
1848400337152
1848400337152
(3) 변수 a의 리스트를 바꾸면 변수 b의 리스트 변화
>>> a = [1,2,3]
>>> b = a
>>> a[1] = 4
>>> print(a)
>>> print(b)
[1, 4, 3]
[1, 4, 3]
b 변수를 a변수에 대입해보니 가리키는 대상이 동일하다는 것을 알 수 있다. 그런데 a 리스트의 두번째 요소 값을 4로 바꾸었더니 a만 바뀌는 것이 아니라 b도 똑같이 바뀌었다. 그 이유는 a, b 모두 동일한 리스트를 가리키고 있기 때문이다.
■ b 변수 생성 시 a 변수의 값을 가져오면서 a와는 다른 주소를 가리키도록 하는 방법
(1) [:] 이용하기
>>> a = [1,2,3]
>>> b = a[:]
>>> a[1] = 4
>>> print(a)
>>> print(b)
[1, 4, 3]
[1, 2, 3]
(2) copy 모듈 이용하기
>>> from copy import copy
>>> a = [1,2,3]
>>> b = copy(a)
>>> a[1] = 4
>>> print(a)
>>> print(b)
[1, 4, 3]
[1, 2, 3]
■ 지역변수 vs 전역변수
프로그래밍 언어에서 변수를 분류하는 방법은 여러가지가 있다. 대표적으로 전역변수와 지역변수의 개념이 있다. 일반적으로 전역변수는 프로그램에 혼란을 주기 때문에 사용을 권장하지 않는다. 하지만, 코딩을 하다보면 전역변수를 사용하면 더 쉽게 코딩할 수 있는 경우가 있다.
- 함수 안의 변수는 지역변수로 영역 밖에서는 사용할 수 없다.
>>> def test():
a = 3
b = 2
return a + b
>>> print(test())
>>> print(a)
5
Error (name 'a' is not defined)
함수에 사용된 a는 지역변수이기 때문에, 함수 바깥의 영역에서는 호출하여 사용할 수 없다. 사용을 하려면 a를 전역변수로 선언해야 한다.
■ 전역변수 선언 방법
(1) 함수 안에서 global로 전역변수 선언하기
>>> def test():
global a
a = 3
b = 2
return a + b
>>> print(test())
>>> print(a)
5
3
(2) 함수 밖에서 global로 전역변수 선언하기
>>> global a
>>> a = 1
>>> def test():
global a
a = 3
b = 2
return a + b
>>> print(test())
>>> print(a)
5
3
'Python > 파이썬 기초' 카테고리의 다른 글
[4-2] 사용자 입출력 (0) | 2024.06.30 |
---|---|
[4-1] 함수 (0) | 2024.06.30 |
[3-3] for문 (0) | 2024.06.29 |
[3-2] while문 (0) | 2024.06.29 |
[3-1] if문 (0) | 2024.06.29 |