본문 바로가기
코딩 이야기/파이썬(Python)

단도직입 파이썬(Python) 기초 – 5 자료형(변수)

by 아재코더 2021. 12. 15.

오늘은 Python의 자료형 중 변수(variable)에 대해 알아봅니다. 타 언어에 비해 파이썬의 특징 중 하나가 변수를 별도 Type 지정(숫자형, 문자형 등등) 없이 사용하더라도 저장된 값을 스스로 판단하여 자료형을 지정합니다. 개인적으로 저는 이 부분이 좀 헷갈리더군요. 변수를 너무 자유분방하게 사용한다고 할까요?

a라는 변수에 뭐가 들었는지 알 수 없기에 변수명만으로는 a가 문자형인지 숫자형인지 배열형인지 알 수 없더군요. 그래서 초반 개념 잡기가 더 어려웠는지도 모르겠습니다. 그런 와중에 변수의 객체를 가리키는 주소를 담을 수도 있습니다. (C언어의 point 개념과 같네요)

>>> a = 1

>>> a = ‘python’

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

a = 1 은 “숫자 1을 a 변수에 넣는다”라고 지금까지 설명했습니다만, 좀 더 정확하게는 “메모리에 객체 1이 들어갈 장소를 마련하고 객체를 입력 후 객체가 들어간 메모리 주소를 a로 가져온다”입니다. 그래서 b = a는 “a가 가리키는 주소를 b에 넣는다”입니다.

>>> b = a = 1 (1을 a 변수에 넣고, a가 가리키는 주소를 b에 넣습니다. 쉬운가요?

>>> a

1

>>> b ( a 변수가 가리키는 주소를 b도 같이 가리키고 있습니다.)

1

결괏값으로 보자면 아주 간단하지만 보이는 것과 달리 결코 쉽지 않은 개념입니다.

python teminal
설명
>>> a = [1, 2, 3]
>>> b = a
>>> b
[1, 2, 3]
>>> id(a)
2162664
>>> id(b)
2162664
>>> a[1] = 4
>>> b
[1, 4, 3]
>>> a is b
True
리스트 [1, 2, 3]을 생성 후 리스트 메모리 주소를 a에 입력
a의 메모리 주소를 b에 입력(a와 b가 같은 주소를 갖게 됨)
b가 가리키는 주솟값 확인
리스트[1, 2, 3] 확인됨
id( ) 함수를 사용하여 a의 주소 확인
메모리 주소
id( ) 함수를 사용하여 b의 주소 확인
a 메모리 주소와 동일한 주소를 가리킴
a가 가리키는 리스트 index 1에 해당하는 값을 2에서 4로 변경
b가 가리키는 주솟값 확인
a의 리스트를 변경했지만 b의 리스트 객체도 변경됨
a와 b가 같나???
응. 같아.

만약 a의 리스트 주소가 아닌 객체들을 b에 입력하려면, [:]를 사용하면 됩니다.

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

>>> b = a[ : ]

>>> a[ 1 ] = 4

>>> a

[ 1, 4, 3 ]

>>> b

[ 1, 2, 3 ]

a의 객체를 변경해도 b의 객체에는 영향을 끼치지 않는다.(a와 b는 전혀 다른 메모리 주소를 갖고 있습니다.)

 

변수를 만드는 방법들은 아래와 같습니다.

튜플은 괄호를 생략해도 변수를 생성한다.
>>> a, b = ( 'python', 'life' )
>>> ( a, b ) = 'python', 'life'
리스트로 변수 생성 가능
>>> [ a, b ] = [ 'python', 'life' ]
여러 개의 변수에 같은 값을 대입
>>> a = b = 'python'
  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

 

a = 1, b = 2라고 가정할 때 두 변수의 값을 바꾸려면 a , b = b, a 만으로 a와 b의 값을 바꿀 수 있습니다. 역시나 심플합니다.

(예전 타 언어를 배울 때는 임의의 변수 c을 만들고 c = a, a = b, b = c 로 변경했었네요. -,.-;)

그럼 같은 주소를 가지면 같은 값을 가지는데, 같은 값을 가지면 같은 주소를 가질까요???

 

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

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

>>> a is b

False

 

객체가 같아도 같은 주소를 가질 수 없습니다.

이로써 파이썬 자료형에 대한 내용은 상당 부분 알아봤습니다. 하지만 아직 많은 내용들이 익숙하지 않아 코딩에는 어려움이 있겠지요..! 하지만 문제없습니다. 천천히라도 지속적으로 눈으로 보고 손으로 타이핑해가며 친해지다 보면 어느 날 따로 놀던 코드들이 눈에 들어오게 됩니다.

그동안 살펴본 자료형에 대한 연습문제 몇 가지를 풀어 보겠습니다. (물론 오픈북, 구글링 했습니다. 나이가 들어서 그런가 가믈가믈… 합니다. 치매예방을 위해 파이썬! ㅠㅠ) 정답은 없습니다. 여러분들도 직접 풀어보세요~

국어 80점, 영어 75점, 수학 55점일 때 합, 평균 구하기

a = { 'kor':80,'eng':75,'mat':55 }

sum = a['kor'] + a['eng'] + a['mat']

ave = sum / len(a)

print(f'tot.score= {sum:<10d} ave.score= {ave:0.2f}')

 

자연수 13의 홀짝 구별

n = 13

jm = ('even', 'odd')

print(f'{jm[n%2]:10s}')

 

주민번호 740814-1068234 연월일과 뒷자리 번호 슬라이싱!

pin = '740814-1068234'

yymmdd = pin[0:6]

num = pin[7:]

print(f'{ yymmdd }\n{ num }')

 

주민번호 pin에서 성별 부분 숫자 출력

print ( f '{ pin[ 7 ] }' )

 

replace 함수 사용으로 'a:b:c:d'문자열을 'a#b#c#d#'문자열로 출력

a = 'a:b:c:d'

b = a.replace( ':' , '#' )

print(b)

 

리스트 [1,3,5,4,2]를 [5,4,3,2,1]로 출력

a = [ 1, 3, 5, 4, 2 ]

a.sort()

a.reverse()

print(a)

 

['Life', 'is', 'too', 'short'] 리스트를 'Life is too short' 문자열로 출력

a = ['Life', 'is', 'too', 'short']

result = " ".join(a)

print(result)

 

(1, 2, 3) 튜플에 4를 추가하여 (1, 2, 3, 4) 만들기

a = (1, 2, 3)

a = a + (4,)

print (a)

 

딕셔너리 a에서 'B'에 해당하는 값 추출하기

a = { 'A':90, 'B':80, 'C':70 }

result = a.pop('B')

print (a)

print (result)

 

a 리스트에서 중복 숫자 제거하기

a = [ 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5 ]

aSet = set(a)

b = list(aSet)

print (b)

 

b가 어떻게 출력될까요? 예상되나요?

a = b = [ 1, 2, 3 ]

a[ 1 ] = 4

print (b)

 

댓글