[SW Expert Academy / 파이썬 프로그래밍 기초] 4. 변수
Programming/Python

[SW Expert Academy / 파이썬 프로그래밍 기초] 4. 변수

  • 목차
    • 변수
    • 변수와 자료형
    • 변수의 생성 및 제거

 

1. 변수

변수

  • 값을 저장할 때 사용하는 식별자
  • 변수명 = 값 (대입연산자)

 

변수의 종류

>>> num=10         # 정수형 변수
>>> str="홍길동"     # 문자열 변수
>>> lst=[1,2,3]    # 리스트 변수

 

변수의 자료형을 확인하는 방법

>>> type(num)
<class 'int'>
>>> type(str)
<class 'str'>
>>> type(lst)
<class 'list'>
  • 파이썬의 동적 타이핑 언어 특징, 저장된 값의 자료형에 의해 변수 자료형 결정
  • 변경이 가능한 변수에 의도하지 않은 값이 전달되면, 변수의 자료형이 변경됨
>>> a = 3.14      # 부동 소수점 숫자형
>>> a = "파이썬"    # 문자열형
>>> a = True      # 부울형
  • TypeError와 같은 오류 발생 가능, 변수는 하나의 자료형만을 사용할 것을 권장

 

변수명

  • 문자, 숫자, _ 로 표현
  • 숫자로 시작하는 변수는 만들 수 없으며, 대소문자는 꼭 구분해야 된다
  • 파이썬3부터는 유니코드를 지원하므로 한글 변수명을 사용할 수 있다.

 

변수와 객체

  • 파이썬의 모든 정보는 객체
  • 변수는 객체에 대한 식별자 역할
>>> var1=10            # Step1. 메모리 공간에 정수 10의 값을 가진 객체 생성
                       # Step2. Step1에서 생성된 객체를 var1이 참조
>>> var2=10            # Step3. Step1에서 생성된 객체를 var2가 참조   
>>> var1 is var2       
True                   # Step4. 두 변수가 동일 객체를 참조

>>> var3=20            # Step5. 메모리 공간에 정수 20의 값을 가진 객체 생성
>>> var1 is var3       # Step6. Step5에서 생성된 객체를 var3가 참조
False                  # Step7. 두 변수가 다른 객체 참조

 

2. 변수와 자료형

(1) Bool

  • 참, 거짓을 판단하는 표현식에 사용하는 자료형
  • True와 False값을 가짐
  • 관계 연산자, 논리 연산자를 사용하는 표현식이 Bool값 반환
  • Bool값을 반환하는 관계 연산
>>> x,y=10,20
>>> x
10
>>> y
20
>>> x < y
True
>>> x > y
False
  • Bool값을 반환하는 논리연산
>>> under18 = False
>>> male = True
>>> under18 and male
False                 # False와 True에 대한 논리 연산자 and의 연산 결과
  • 조건문에서 사용되는 Bool값
>>> if under18:
                print("미성년자입니다.")
        else:
            print("성년입니다.")

성년입니다.

 

(2) Tuple

  • ()안에 서로 다른 자료형의 값을 콤마(,)로 구분해 하나 이상 저장할 수 있는 컬렉션 자료형
  • 0부터 시작하는 인덱스를 이용해 접근할 수 있음. 한번 저장된 항목은 변경할 수 없음
  • Tuple형 변수 선언
>>> student = ("홍길동",20)
>>> student = "홍길동",20       # student = ("홍길동",20)와 동일
>>> student
('홍길동',20)
  • 인덱스를 이용해 튜플의 개별 항목에 접근
    : 튜플 스튜던트는 두 개의 원소를 가지고 있어 유효한 인덱스의 범위는 0~1이기 때문에 오류가 난다
>>> student[0]
'홍길동'
>>> student[1]
20
>>> student[2]
Traceback (most recent call list):
    flie"<input>",line 1, in <module>
IndexError: tuple index out of range
  • 튜플의 항목 변경 (불가능)
    : 튜플은 한 번 저장된 항목의 값을 변경할 수 없기 때문에 오류가 난다
>>> student[1]=21
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    student[1]=21
TypeError: 'tuple' object does not support item assignment
  • 새로운 튜플을 저장
    student 는 변수이므로 새로운 튜플 객체를 참조하는 것은 문제가 안된다
>>> student = ("임꺽정",30)
>>> student
('임꺽정', 30)

 

(3) List

  • []안에 서로 다른 자료형의 값을 콤마(,)로 구분해 하나 이상 저장할 수 있는 컬렉션 자료형
  • 0부터 시작하는 인덱스를 이용해 접근할 수 있음
  • 한번 저장된 항목이라도 변경할 수 있음
  • List형 변수 선언
>>> student = ["홍길동",20]
>>> student
['홍길동', 20]
  • 인덱스를 이용해 리스트의 개별 항목에 접근
    : 리스트 student는 두 개의 원소를 가지고 있어 유효한 인덱스의 범위는 0~1이기 때문에 오류가 난다
>>> student[0]
'홍길동'
>>> student[1]
20
>>> student[2]
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    student[2]
IndexError: list index out of range
  • 리스트는 항목의 값을 변경할 수 있음.
>>> student[1]=21
>>> student
['홍길동', 21]
  • 새로운 리스트를 저장
    student가 변수이므로 새로운 리스트 객체를 참조할 수 있음
>>> student=["임꺽정",30]
>>> student
['임꺽정', 30]

 

(4) Set

  • {}안에 서로 다른 자료형의 값을 콤마(,)로 구분해 하나 이상 저장할 수 있는 컬렉션 자료형
  • list, Tuple과 다르게 순서의 개념이 존재하지 않아 인덱스를 사용할 수 없음
  • 데이터 항목의 중복을 허용하지 않음
  • Set형 변수 student선언
>>> student = {"홍길동","이순신","강감찬","홍길동"}
>>> student
{'이순신', '홍길동', '강감찬'}
>>> len(student)
3
  • 두 번 사용된 "홍길동"은 중복을 허용하지 않기 때문에 하나만 입력됨
    : 셋은 인덱스를 이용해 개별 항목에 접근할 수 없음
>>> student[0]
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    student[0]
TypeError: 'set' object is not subscriptable
  • set student에 새로운 항목 추가하기 (합집합 set)중복 데이터는 허용되지 않음
    |키(수직선)를 넣어줄때는 shift + \키를 같이 눌러준다.
>>> student |= {"을지문덕","이순신"}
>>> student
{'홍길동', '이순신', '을지문덕', '강감찬'}
  • 변수 student 에 새로운 set 저장하기
    새로운 셋 객체 참조
>>> student = {"임꺽정",30}
>>> student
{'임꺽정', 30}

 

(5) Dictionary

  • {}안에 키:값 형식의 항목을 콤마(,)로 구분해 하나 이상 저장할 수 있는 컬렉션 자료형
  • 키를 이용해서 값을 읽어 올 수 있음
  • 항목을 추가할 때 동일키가 없으면 새로운 항목을 추가하고, 동일키가 있으면 저장된 항목을 변경한다
  • Dictionary형 변수 선언
>>> dogs={1:"골든리트리버",2:"진돗개",3:"보더콜리"}
>>> dogs
{1: '골든리트리버', 2: '진돗개', 3: '보더콜리'}
  • 키를 이용해 딕셔너리 개별 항목에 접근하기
    딕셔너리 dogs는 유효한 키로 1,2,3 사용
>>> dogs[1]
'골든리트리버'
>>> dogs[2]
'진돗개'
>>> dogs[3]
'보더콜리'
>>> dogs[4]
Traceback (most recent call last):
  File "<pyshell#47>", line 1, in <module>
    dogs[4]
KeyError: 4
  • 값을 변경하기
    '2:진돗개'가 존재하므로, 값이 변경된다
>>> dogs[2]="레브라도리트리버"
>>> dogs
{1: '골든리트리버', 2: '레브라도리트리버', 3: '보더콜리'}
  • 딕셔너리는 항목을 추가 할 때, 동일 키가 있으면 저장된 항목을 변경함
    딕셔너리는 항목을 추가 할 때, 동일 키가 없으면 새로운 항목으로 추가함
>>> dogs["4"]="알래스카말라뮤트"
>>> dogs
{1: '골든리트리버', 2: '레브라도리트리버', 3: '보더콜리', '4': '알래스카말라뮤트'}
  • 하지만 정수 4와 문자열 "4"는 자료형이 다름
    새로 추가한 값을 보려면 문자열 4를 입력해야 한다.
>>> dogs[4]
Traceback (most recent call last):
  File "<pyshell#52>", line 1, in <module>
    dogs[4]
KeyError: 4

>>> dogs["4"]
'알래스카말라뮤트'
  • 변수 dogs에 새로운 빈 딕셔너리 객체를 저장하기
    dogs가 변수이므로 새로운 빈 딕셔너리 객체를 참조할 수 있음
>>> dogs={}
>>> dogs
{}

 

(6) None

  • None 객체를 이용해 널(null)객체 상태를 표현함 (null:객체가 존재하지 않는 상태를 나타내는 표현)
  • 파이썬에서는 최초 변수를 선언할 때 초기화를 하지 않으면 에러가 발생함. 초기화값을 제공하지 않을 경우엔 None 객체 저장 필요
  • None형 변수 선언: 메모리 공간에서 obj라는 변수를 찾지 못해 발생하는 에러
  • obj에 어떠한 값도 저장하고 싶지 않을 경우 None객체를 저장함
  • obj변수를 선언할 때 값을 대입하지 않아 name에러가 발생
>>> obj
Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    obj
NameError: name 'obj' is not defined
  • 어떠한 객체도 참조하지 않은 None객체의 상태를 확인할 때는 동일한 값을 검사하는 ==연산자 보다는 동일 객체 여부를 검사하는 is연산자를 사용하는 것을 권장
>>> obj = None
>>> obj is None
True
>>> obj == None
True
  • None 객체 상태는 if문과 같이 True, False 부울값을 반환하는 식에서 False로 평가된다
>>> if obj:                     # obj가 None이므로 False로 평가
    print("obj는 None이 아닙니다.")
else:
    print("obj는 None입니다.")      # else문의 print()함수 실행

obj는 None입니다.
>>> if not obj:                 # obj가 None이므로 False로 평가, not연산되어 True반환
    print("obj는 None입니다.")      # if문의 print()함수 실행
else:
    print("obj는 None이 아닙니다.")

obj는 None입니다.

 

3. 변수의 생성 및 제거

변수를 생성하고 초기화하는 다양한 방법

  • 변수는 기본적으로 한 번에 하나씩 생성하지만, 그 이상의 변수를 한 번에 생성할 수도 있음
>>> x = y = 10
>>> x
10
>>> y
10
  • 튜플을 이용해 변수 생성하고 초기화
>>> x, y = (10, 20)
>>> (x, y) = 10, 20
>>> x, y = 10, 20
>>> (x, y) = (10, 20)
>>> x
10
>>> y
20
  • 리스트를 이용해 변수 생성하고 초기화
>>> x, y = [10, 20]
>>> [x, y] = 10, 20
>>> [x, y] = [10, 20]
>>> x
10
>>> y
20
  • 변수 생성과 초기화의 특징 → 쉽게 변수의 값 교체 가능
>>> x, y = y, x
>>> x
20
>>> y
10

 

변수의 제거

  • 파이썬은 Garbage Collector에 의해 객체가 사용한 메모리 공간 자동관리함
  • 그렇기 때문에 개발자가 메모리 관리를 직접할 필요 없음
  • 사용하지 않은 변수를 제거할 경우 del()함수를 사용한다
>>> x = 10
>>> y = 20
>>> del(x)
>>> del(y)

>>> x
Traceback (most recent call last):
  File "<pyshell#92>", line 1, in <module>
    x
NameError: name 'x' is not defined

>>> y
Traceback (most recent call last):
  File "<pyshell#93>", line 1, in <module>
    y
NameError: name 'y' is not defined