프로그래밍 언어/Python

Python_변수의 개념과 생성, 작명법

OHSAYU 2022. 9. 5. 13:45

■ 수학에서 변수(變數, variable)는 수식에 따라서 변하는 값을 뜻한다.

    어떤 정해지지 않은 임의의 값을 표현하기 위해 사용된 '기호'이다. 보통 쉽게 설명하기 위해서 '변하는 숫자'라는 표현을 자주 쓰고는 한다. 반대말로는 상수가 있다. 변수라는 존재는 수학이라는 학문에 대수학이 가져다준 가장 큰 산물 중 하나이자, 또한 16세기 말을 기점으로 대수학이 본격적으로 엄밀하고 이전과는 다른 수준의 수학으로 진화될 수 있게 해 준 장본인이기도 하다.

 

컴퓨터 프로그래밍에서 변수(variable)는 아직 알려지지 않거나 어느 정도까지만 알려져 있는 양이나 정보에 대한 상징적인 이름이다.

    또한 특정 값을 저장하는 메모리 공간을 뜻한다. 해당 메모리 공간에 저장되는 값은 정수형(integer(int)), 실수형(float, double), 문자(char) 및 문자열(String) 등 여러가지 형식이 있으며 이를 활용하여 프로그래밍한다. 해당 메모리 공간에는 허용되는 범위 내에 어떤 값이든 저장할 수 있으므로 변수라고한다.

 

파이썬에서 사용하는 변수(variable)는 파이썬에서 사용하는 변수는 객체를 가리키는 것이라고도 말할 수 있다. 객체란 우리가 지금껏 보아 온 자료형과 같은 것을 의미하는 말이다.

 

수학이 아닌 일상생활에서 변수라는 단어가 쓰일 때는 행위에 대한 결과가 여러 가지인 경우, 혹은 어떤 것을 하기 위한 선택지가 많은 상황 등, 현재 정해져 있지 않은 요인들을 뜻한다.
※ 파이썬에서 변수 이름은 대소문자를 가린다. 예를 들어, a와 A라는 변수는 서로 다른 변수이다.

※ 수학에서 등호(=)는 같다는 의미. 프로그래밍 언어에서는 대입 연산자라고 하고 저장(할당)의 의미를 갖는다. 프로그래밍 언어에서는 같다는 '=='로 표현한다.
※ 변수로 사용할 이름을 대입 연산자의 왼쪽에, 그리고 할당할 값을 대입 연산자의 오른쪽에 두어야 한다.
※ 'L-Value'는 할당 가능한 또, 다시 이용될 수 있는 값을 의미하는 것으로 '변수'가 이에 해당한다.
※ 'R-Value'는 할당할 수 없는 현재만 사용되고 소멸되는 값으로 '상수'가 이에 해당한다.

 일반 변수 생성

a = 3
b = 'Hello World' # 쌍따옴표도 가능

 여러줄의 변수 생성

multiline_string = ''' # 쌍따옴표도 가능
이것은
여러 줄의
문자열입니다.
'''

리스트 변수 생성

a = [1, 2, 3]

    만약 위 코드처럼 a = [1, 2, 3]이라고 하면 [1, 2, 3] 값을 가지는 리스트 자료형(객체)이 자동으로 메모리에 생성되고 변수 a는 [1, 2, 3] 리스트가 저장된 메모리의 주소를 가리키게 된다.

※ 메모리란 컴퓨터가 프로그램에서 사용하는 데이터를 기억하는 공간이다.

a 변수가 가리키는 메모리의 주소는 다음과 같이 확인할 수 있다.

a = [1, 2, 3]
id(a)
>>> 2167849062208

    id 함수는 변수가 가리키고 있는 객체의 주소 값을 돌려주는 파이썬 내장 함수이다. 즉, 여기에서 필자가 만든 변수 a가 가리키는 [1, 2, 3] 리스트의 주소 값은 2167849062208 임을 알 수 있다.

리스트를 복사하고자 할 때

a = [1, 2, 3]
b = a

    b 변수에 a 변수를 대입하면 어떻게 될까? b와 a는 같은 걸까 다른 걸까? 결론부터 말하면 b는 a와 완전히 동일하다고 할 수 있다.

다만 [1, 2, 3] 리스트를 참조하는 변수가 a 변수 1개에서 b 변수가 추가되어 2개로 늘어났다는 차이만 있을 뿐이다. id 함수를 사용하면 이러한 사실을 확인할 수 있다.

id(a)
>>> 2167849062208 
id(b)
>>> 2167849062208

    id(a)의 값이 id(b)의 값과 동일함을 확인할 수 있다. 즉 a가 가리키는 대상과 b가 가리키는 대상이 동일하다는 것을 알 수 있다. 동일한 객체를 가리키고 있는지에 대해서 판단하는 파이썬 명령어 is를 다음과 같이 실행해도 역시 참(True)을 돌려준다.

a is b
>>> True

다음 예를 계속해서 수행해보자.

a[1] = 4
print(a)
print(b)
>>> [1, 4, 3]
>>> [1, 4, 3]

    a 리스트의 두 번째 요소를 값 4로 바꾸었더니 a만 바뀌는 것이 아니라 b도 똑같이 바뀌었다. 그 이유는 앞에서 살펴본 것처럼 a, b 모두 동일한 리스트를 가리키고 있기 때문이다. 그렇다면 b 변수를 생성할 때 a 변수의 값을 가져오면서 a와는 다른 주소를 가리키도록 만들 수는 없을까? 다음 2가지 방법이 있다.

[:] 이용

첫 번째 방법으로는 다음과 같이 리스트 전체를 가리키는 [:]을 사용해서 복사하는 것이다.

a = [1, 2, 3]
b = a[:]
a[1] = 4
print(a)
print(b)
>>> [1, 4, 3]
>>> [1, 2, 3]

위 예에서 볼 수 있듯이 a 리스트 값을 바꾸더라도 b 리스트에는 영향을 끼치지 않는다.

copy 모듈 이용

두 번째는 copy 모듈을 사용하는 방법이다. 다음 예를 보면 from copy import copy를 사용해서 copy 모듈을 다운하고 실행한다

from copy import copy
a = [1, 2, 3]
b = copy(a)
b is a
>>> False

위 예에서 b = copy(a)는 b = a[:]과 동일하다.

두 변수가 같은 값을 가지면서 다른 객체를 생성했는지 b is a 문장을 통해서 확인해 보았다. 참고로 다음과 같이 복사해도 결과는 같다.

a = [1, 2, 3]
b = a.copy()

튜플과 리스트로 만들기

(a, b) = 'python', 'life'
(a, b) = ('python', 'life')
a, b = 'python', 'life'
a, b = ('python', 'life')
[a, b] = ['python', 'life']
[a, b] = 'python', 'life'
a, b = ['python', 'life']
a, b = ['python', 'life']

a, b
>>> ('python', 'life')

변수 바꾸기

a = 3
b = 5
a, b = b, a
print(a)
print(b)
>>> 5
>>> 3

처음에 a에 값 3, b에는 값 5가 대입되어 있었지만 a, b = b, a 문장을 수행한 후에는 그 값이 서로 바뀌었음을 확인할 수 있다.

지역변수와 전역 변수

    블록(함수 등) 내에서 선언되어 블록 내에서만 이용할 수 있는 변수를 지역변수(Local Variable)라고 한다. 처리가 끝난 이후에는 해당 변수는 이용할 수 없으며, 상위 혹은 다른 블록에 같은 이름의 변수가 있더라도 메모리 공간 자체는 다르므로 다른 변수라고 보아야 한다. 다른 블록에 전달되는 변수를 매개변수라고 하며, 변수에 저장되어있는 값뿐만 아니라, 해당 메모리 공간 자체를 활용하기 위하여 메모리 공간의 주소 값을 이용하는데, 이를 보통 포인터라고 하며, 포인터를 저장하고 있는 변수를 포인터 변수라고 한다.

    지역변수와는 반대로 프로그램 내 전체에서 사용 가능한 변수를 전역 변수(Global Variable)라고 한다. 

모든 지역 변수는 참조되기 전에 반드시 선언되어야 한다. 전역 변수를 변경하려는 경우에는 반드시 참조하기 전에 global 키워드를 써서 전역 변수임을 명시한다.

유효한 변수 이름의 규칙

파이썬에서는 변수에 이름을 정할 때 꼭 따라야 하는 몇 가지 규칙이 존재한다.

  • 변수 이름은 오직 대문자와 소문자만 포함할 수 있다(A-Z, a-z)
  • 숫자를 포함할 수 있다(0-9)
  • 밑줄을 포함할 수 있다(_)
  • 변수의 이름은 숫자로 시작할 수 없다
  • 연산자, 특수 문자로 사용되는 기호는 사용할 수 없다(+, -, *, /, &, % 등)
  • 숫자로만 구성된 이름은 사용할 수 없다
  • 시스템 예약어는 사용할 수 없다(if, for, while, and, or 등)
  • 공백 문자는 사용할 수 없다

설명하는 이름이 짧은 이름보다 낫다

    변수가 무슨 역할을 하는지 설명하는 변수 이름은 특히나 복잡한 프로그램에서 매우 필수적이다. 종종 설명하는 변수의 이름을 짓기 위해서는 다수의 단어가 요구되지만, 짧은 단어보다 훨씬 낫기 때문에 긴 단어를 적재적소에 활용하자. 다음 예제를 보면, 값 3600은 s라는 변수에 할당되어 있다.

s = 3600
seconds = 3600
seconds_per_hour = 3600

    s라는 변수 이름은 무슨 의미를 가지고 있는지 전혀 유추할 수 없어서 매우 모호하다. 변수 이름을 완전한 단어로 만들어 줌으로써 코드가 무슨 의미를 가지고 있는지 더 쉽게 이해할 수 있다.

    초를 의미하는 seconds라는 변수 이름을 사용하면 더 나은 문맥을 제공할 수 있다. 하지만 이조차도 코드의 완전한 의미를 전하지는 못한다. 왜냐하면 3600이란 초를 나타내는 숫자가 어떤 작업을 끝내기 위해 걸리는 시간인지, 아니면 어떤 동영상의 길이인지 알 수 있는 방법이 없기 때문이다.

    마지막처럼 seconds_per_hour 같은 이름을 사용하면 더 이상 코드가 무슨 의미를 가지고 있는지 단번에 알 수 있게 된다. 위와 같은 코드를 마주하면 3600이라는 숫자가 한 시간을 초로 나타낸 것이라는 것에는 의심의 여지가 없다. seconds_per_hour이라는 변수의 이름이 s나 seconds보다 더 많은 입력을 요구하지만, 반대로 훨씬 더 투명한 의미를 제공한다.

    하지만 과하게 이름을 길게 짓는 행위도 피해야 한다. 과하게 길다는 의미는 객관적이지만, 서너 단어 이하로 변수의 이름을 지어주는 것이 바람직하다. 

파이썬 변수 이름 컨벤션

    많은 프로그래밍 언어에서 변수의 이름을 numStudents나 listOfNames같이 카멜케이스(camelCase) 형식으로 짓는 것은 매우 흔하다. 카멜케이스란 첫 번째 단어의 첫 글자를 제외하고 모든 단어의 첫 글자를 대문자로 작성하는 표기법이다. 소문자와 대문자로 문자가 짜여 있는 모습이 낙타의 혹 같아서 붙여진 이름이다.

     하지만 파이썬에서는 변수의 이름을 num_students나 list_of_names와 같이 스네이크케이스(snake case)로 작성해주는 것이 더 흔한 방법이다. 모든 글자는 소문자로 작성하며, 매 단어를 밑줄로 구분해주는 방법이다. 스네이크 케이스로 파이썬 코드를 작성하면 안 된다는 법이나, 작성할 때 코드가 구동되지 않는 것은 아니지만, PEP8에서는 스네이크 케이스를 사용하는 것을 좋은 관습이라고 여겨진다.

연산자 종류

연산자 의미
= 변수에 값을 할당(저장)
== L-Value와 R-Value가 같은지 판별
+= 수를 더한 후 다시 대입
-= 수를 뺀 후 다시 대입
*= 수를 곱한 후 다시 대입
/= 수를 나눈 후 다시 대입
*= 수를 거듭제곱한 후 다시 대입
//= 수를 나눈 후 몫을 대입
%= 수를 나눈 후 나머지를 대입

 

 

출처 : https://ko.wikipedia.org/wiki/%EB%B3%80%EC%88%98

 

변수 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

출처 : https://namu.wiki/w/%EB%B3%80%EC%88%98

 

변수 - 나무위키

어떤 상황의 가변적 요인을 의미하는 한자어다.

namu.wiki

출처 : https://wikidocs.net/18

 

02-8 자료형의 값을 저장하는 공간, 변수

지금부터 설명할 내용은 프로그래밍 초보자가 얼른 이해하기 어려운 부분이므로 당장 이해가 되지 않는다면 그냥 건너뛰어도 된다. 파이썬에 대해서 공부하다 보면 자연스럽게 알게 ...

wikidocs.net

출처 : https://jacoblee.io/python-variable/

 

파이썬 변수 이해하기

변수(Variable)파이썬에서 변수란, 값을 할당할 수 있는 이름이자, 작성할 코드 안에서 할당한 값을 참조하는 데 사용된다. 변수는 프로그래밍에서 중요한 역할을 하는데, 그 이유는 다음과 같다.

jacoblee.io

출처 : https://null-0.tistory.com/20

 

010. 파이썬에서 변수란 무엇인가?

이번 시간에는 파이썬에서 사용되는 '변수'라는 것에 대해서 알아보겠습니다. 프로그램을 하다 보면, 변수라는 말을 많이 듣습니다. 실제로 모든 프로그램 언어에는 변수라는 것이 있고, 또 이

null-0.tistory.com

출처 : https://dojang.io/mod/page/view.php?id=2176 

 

파이썬 코딩 도장: 6.1 변수 만들기

Unit 6. 변수와 입력 사용하기 지금까지 파이썬 셸에서 숫자와 연산자를 사용하여 직접 계산을 해보았습니다. 그런데 계산 결과를 바로 출력할 수는 있었지만 결과를 계속 가지고 있을 수는 없었

dojang.io