본문 바로가기

💻프로그래밍/python

[파이썬 독학] 1. 변수(variable)의 정의, 선언, 교환 방법

반응형

1. 변수(variable) 정의와 변수 선언

변수란, '변할 수 있는것'으로 어떠한 값을 담는 '상자'라고 생각하면 된다.

a = 10

 

예를들어,  a = 10이라고 하는 것은 '10을 a라고 하는 상자(변수)에 담아줘! '라는 의미이다.

그리고 이것을 '변수를 선언한다'라고 표현한다.

( * 우리가 수학 시간에 배운 등호'='는 프로그래밍에서는 '=='로 표시한다. )

 

 

 

우리가 변수에 넣은 값이 잘 들어갔는지 확인해보고 싶다면, print() 함수 이용하여 값을 출력해보면 된다. print(a)를 출력했을 때 10이 출력되는 것을 알 수 있다.

print(a)

 

 

 

그렇다면 여러개의 변수를 한 번에 선언하고 싶을때는 어떻게 해야 할까?

a = 10
a,b = (10, 20)
[a,b] = [10, 20]
a = b = 10
a = None

 

  •    a = 10 
  •    a , b = (10, 20)  :튜플을 이용하여 각각 값을 할당
  •    [a, b] = [10, 20]  :리스트를 이용하여 각각 값을 할당
  •    a = b = 10  : a와 b에 똑같은 값을 할당하고 싶을 때 사용
  •    a = None : 비어있는 변수를 만들고 싶을 때 사용

 

 

 

 

2. 변수 이름

변수를 선언할 때 변수의 이름은 마음대로 지어도 된다. 하지만 몇 가지 지켜야 할 규칙이 있다,

  • _ 혹은 영문자로 시작해야 한다.
  • 숫자로 시작할 수 없다
  • 특수문자(+,-,%,^,%등)은 사용할 수 없다.
  • 변수 이름에 공백이 있으면 안 된다 (보통 _로 이어줌)
  • 파이썬의 예약어(for, while, if 등)는 사용할 수 없다.

 

 

3. 변수 교환 (swap)

이번에는 각각의 변수를 선언하고 두 변수에 들어있는 값을 서로 바꿔보겠다.

 

a = 10
b = 100

 

그전에 기본적으로 변수에 대해 알고 넘어가야 할 것이 있다. 우리가 변수를 선언하면 램에 있는 메모리 공간에 데이터를 저장할 수 있는 공간이 각각 할당된다. a = 10 위에서는 쉽게 설명을 하기 위해 10을 a에 담는다고 했지만 조금 더 정확히 말하자면 '10'이 있는 주소를 'a'라는 상자(변수)에 넣는 것이다. 같은 원리로 b =100 은 100이 있는 주소를 b라는 변수에 넣는다고 생각하면 된다. 처음 접했을 때 조금 어려운 개념일 수도 있지만, 예를 들어 box = '나'라고 선언했을 때 그 box에 내가 직접 들어가는 게 아니라 내가 있는 주소가 적힌 종이를 상자에 넣는다 라고 생각하면 쉬울 것 같다.

 

 

 

그럼 이제 a와 b의 값을 바꿔보자!

다른 프로그래밍 언어에서는 이 경우 a, b를 제외한 또 다른 빈 상자 (변수)를 만들어 두 변수의 값을 교환해야 하지만, 파이썬의 경우 훨씬 간단한 방법으로 해결할 수 있다.

 

a = 10
b = 2000

먼저 변수 a와 b를 각각 10, 2000로 선언한다. 

 

 

 

a = 10
b = 2000
a,b = b,a

 a,b = b, a a와 b에 있는 값을 서로 바꿔주면 끝이다! 

 

 

 

a = [10, 20, 30]

변수에 대한 기본적인 것들을 공부했으니 이번에는 조금 더 심화 내용을 알아보기로 한다. 변수 a에 [10, 20, 30]이라는 리스트 값을 넣는다. a는 그 리스트가 있는 주소를 담게 되고, 리스트의 각각의 방에는 10,20,30의 값이 들어가 있다. 

* 리스트(list)에 대한 구체적인 내용은 추후에 다룰 예정이다. 지금은 그냥 어떤 하나의 서랍이 만들어졌고 각 서랍에 값이 들어갔다 정도로만 이해하면 된다.

 

a = [10, 20, 30]
b = a

다음으로  b = a로 변수 b에 a리스트의 주소를 넣었다. 위의 그림을 보면 알 수 있듯, a와 b가 같은 곳을 가리키고 있다. (즉, a 와 b의 주소가 같다.)

 

 

 

a = [10, 20, 30]
b = a
a[0] = 200

 a [0] = 200 이라는 것은 a에 0번째 있는 값을 200으로 바꿔줘!라는 의미이다. 여기서부터는 리스트의 개념을 알고 있어야 쉽게 이해되는 부분이지만, 지금은 그냥 0이라는 이름의 방에 있는 값을 200으로 바꿨다고 생각하면 될 것 같다.

 

 

 

a = [10, 20, 30]
b = a
a[0] = 200
print(b)

마지막으로 print(b) 라는 코드를 작성하여 b에 들어가 있는 값을 출력해보면 [200, 20, 30]이 나온다. 즉 리스트의 첫 번째 값이 10에서 200으로 바뀐 것을 알 수 있다. 우리는 a의 값을 바꿨는데 왜 b의 값도 같이 바뀌었을까?여기서 아까 언급했던 '주소'를 저장한다는 개념을 이해해하는 것이 필요하다. b = a에서 a의 값이 복사되어 b에 들어간 것이 아니고 a의 '주소'를 가지고 있는 것이다. 즉 a와 b가 같은 곳을 바라보고 있기 때문에 a의 값을 바꾸면 b의 값이 같이 바뀌게 되는 것이다.

 

 

 

그렇다면 a의 복사본을 b에게 주고 a의 값이 변화할 때 b는 변하지 않게 하고 싶으면 어떻게 해야 할까? 이때는 슬라이싱[:]을 이용하면 된다. 방법은 다음과 같다.

 

첫 번째로, 아까와 같이 a = [1,2,3] 으로 하나의 리스트를 만들어 넣어준다. 이때 a리스트의 각각의 방에 1,2,3이 들어가 있는 것을 알 수 있다.

 

 

 

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

두번째로 b = a[;] 를 이용하여 a의 값들을 각각 슬라이싱 하고 복사해서 b에 넣어준다. 아까 b = a 만 했을 때와 비교하면 다른 것을 알 수 있다.

 

a = [1,2,3]
b = a[:]
a[0] = 4

마지막으로a [0] =4 즉, a라는 리스트의 0번째 방에 있는 값을 4로 바꿨을 때 b에는 영향을 주지 않고 a만 바뀌는 것을 알 수 있다.

 

 

 

반응형