2023. 12. 31. 12:20ㆍ학습/팀스터디
도전한 점
1차 강의 들을 때 포인트 체크 (처음)
2차 강의 들을 때 포인트 체크 (복습)
3차 강의 들을 때 포인트 체크 (복습)
02 파이썬 프로그래밍의 기초, 자료형
[목차]
02-1 숫자형
02-2 문자열 자료형
02-3 리스트 자료형
02-4 튜플 자료형
02-5 딕셔너리 자료형
02-6 집합 자료형
02-7 불 자료형
02-8 자료형의 값을 저장하는 공간, 변수
02-1 숫자형
1. 자료에 대한 타입 : 숫자, 문자역, 불
2. 어떤 값을 담는 자료구조 : 변수, 리스트, 튜플, 딕셔너리, 집합
변수란? = 'ㅂ'+'ㅅ' = '박스'
간단히 말해, 상자. 박스 안에 값을 담는 개념.
*정확히 하면, a=1 이란 '1'이라는 '객체'가 사실 메모리에 저장되어 있고 '변수'에는 그의 주소 값을 가지고 있는 것이다. 그러니까 상자에 넣는 개념보단 변수(a)와 객체(1)은 서로 같은 주소 값을 바라보고 있는 관계이다.
최면 시작
앞으로 '=' 를 보면 무조건 담는다는 개념으로 이해해.
a = 3 이라면?
3을 a에 담는다.
그래서 a = a + 1은?
a + 1을 먼저 계산해서 값을 a 개념에 담는다.
숫자형이란?
숫자를 표현한 자료형
정수형(int), 실수형(float)이 가장 많이 쓰인다.
정수형
양의 정수, 음의 정수, 0
print(type(a))
a의 자료타입형을 알려준다.
컴퓨터식 지수 표현 방식
4.24e10 또는 4.24E10처럼 표현한다.
a = 3
b = 4
print(a + b) 덧셈
print(a // b) 몫 -> sql에서는 div
제곱을 나타내는 연산자
**
나머지 연산자(%)
몫 연산자(//)
02-2 문자열 자료형
문자열 자료형 만드는 4가지 방법
"", '', ''' ''', """ """
"123"도 문자형이야 그래서 "1"+"1"="11"
1 + 1 = 2 라는 건 불변의 법칙이 아니다.
\ 백슬래쉬 : 다음을 문자열로 입력한다.
코드 수정하고 안된다고 하는 사람들(?)
대부분이 저장이 안된 문제로 ctrl+S 누르면 해결된다. 저장을 습관화 한다.
여러 줄인 변수를 입력할 때
\ 백슬래쉬, """ """, ''' '''
이스케이프 코드 중에서 多사용
\n(줄바꿈), \\, \', \"(뒤에 있는거 그대로 사용하기)
문자열 연산하기 - 문자열 더해서 연결하기
head = "Python" ―― Python을 head 안에 넣는다.
tail = " is fun!" ―― in fun!을 tail 안에 넣는다.
print(head + tail) ―― 두 개를 연결한다는 개념이다.
문자열 연산하기 - 문자열 곱하기
반복해서 붙인다는 개념이다.
a = "python"
print(a *3)
pythonpythonpython
단, 문자열끼리 곱하긴 안되고 문자*숫자만 가능하다.
문자열 길이(length) 구하기
print(len(a))
문자열의 인덱싱 : 하나씩 뽑아온다.
print(a[3]) -> 문자열의 3번째 인덱스(0부터 시작)를 넣어서 값을 가져옴.
print(a[-1]) -> 뒤의 1번 (앞은 0이었던 것과 다름.)
문자열의 슬라이싱 : 덩어리로 잘라온다.
a[이상:미만:간격]
비어있으면 처음이나 끝이다.
a[::-1]
뒤에서부터 끝가지 슬라이싱한다.
ex) 거꾸로 읽어도 같은지 확인하는 코드
a. (%f를 사용한) 문자열 포매팅
1. 숫자 바로 대입
"%d" % 3
2. 문자열 바로 대입
"%s" % "fvie"
3. 숫자 값을 나타내는 변수로 대입
number = 3
"%d" % number
4. 2개 이상의 값 넣기
number = 3
day = "three"
"%d %s" % (number, day)
문자열 포맷 코드
%s (문자열, 모든 형태의 값)
%d (정수)
%% 퍼센트 그자체
포맷 코드와 숫자 함께 사용하기
PASS
소수점 표현하기
"%0.4f" or "%.4f%
소수점 넷째자리까지 표현해라
b. format 함수를 사용한 포매팅
"{0}".foramt(3)
print(a)
3을 0에 넣는다. 여기서 0은 순서를 표현한 것이다.
그래서 "{0} {1}".format(number, day) 순서대로 넣어준다. -> 순서변경 가능
순서가 헷갈릴 수 있으니까 변 자체로 쓰기도 함. -> 혼용도 가능
"{number} {day}".format(number=10, day=3)
특수기호 자체로 쓰고 싶을 때는 {{}} 두 번 쓴다.
c. f 문자열 포매팅 (최신 파이썬 문법) 多
name = '홍길동'
age = 30
a = f'나의 이름은 {name}입니다. 나이는 {age + 1}입니다.'
print(a)
중간에 연산도 가능하고 굉장히 직관적이다.
소수점 연산은
y = 3.141592
a = f'{y:0.4f}'
print(a)
이상 3가지의 포매팅 방법을 달달 외우지 말아 머리 낭비다.
문자열 관련 함수들 (문자열에 쓸 수 있는 여러 기술)
기본적으로 print(a.count('b')) 이렇게 출력연산자 안에 넣네?
a. 문자열 개수 세기 - count
b. 위치 알려주기1 - find 없는 문자 쓰면 -1 뱉음.
c. 위치 알려주기2 - index 없는 문자 쓰면 오류 남.
d. 문자열 삽입 - join ",".join('abcd') 이건 그냥 print(a)
join은 리스트도 가능. 맨 끝에는 안들어가고 사이사이. join은 뭉치는 개념.
e-1. 소문자를 대문자로 바꾸기 - upper()
e-2. 대문자 or 혼용을 소문자로 바꾸기 - lower()
f-1. 왼쪽 공백 지우기 - lstrip()
f-2. 오른쪽 공백 지우기 - rstrip()
f-3. 양쪽 공백 지우기 - strip()
g. 문자열 바꾸기 - repalce
h. 문자열 나누기 - split() 문자열이 리스트형으로 바뀐다.
split의 기본 값이 띄워쓰기를 기준으로 나눈다.
만약 모두 콜론으로 연결된 상태면 split(":")
당신은 이제 문자열의 마법사가 되었습니다. 빠밤.
02-3 리스트 자료형
변수를 여러개 놓은 개념이다. 리스트는 서랍장이다.
대괄호와 대괄호 사이를 콤마로 구분해서 넣는다.
타언어와 다르게 리스트 안에 문자도 담고 숫자도 담을 수 있다. (속도는 비효율적)
리스트 안에 또 리스트를 넣을 수 있다. (인덱스하면 리스트 통으로 나옴)
자료 타입 : class 'list'
리스트의 인덱싱 = 문자열(string)이랑 거의 똑같다.
a = [1, 2, 3]
print(a[1] + a[2])
결과 5
a = [1, '2', '3']
print(a[1] + a[2])
결과 23
a = [1, 2, 3, ['a', 'b', 'c']]
print(a[3][1])
결과 'b' -> 중요
인덱싱이 안되는데 시키면 오류나긴 해 근데!
a = [1, "hello", 3, ['a', 'b', 'c']]
print(a[1][0])
1번째의 문자열 'hello' 중에서 0번째인 'h'가 출력된다. -> 중요
삼중 리스트에서 인덱싱하기 -> 연습하기
리스트이 슬라이싱 = 거의 문자열과 비슷하다.
이상:미만:간격
중첩된 리스트에서 슬라이싱하기 -> 자주 연습하기
문자열을 이해하면 이거도 쉽다.
리스트 연산하기 : 서랍에 서랍을 추가한 느낌이라, 문자열과 비슷하다.
리스트 반복하기(*)
리스트 길이구하기 : len(a)
막간 string 개념 이해하기 쉬워지
string 문자열 (문자+리스트(배열))
char 문자
어떻게 보면 문자로 이루어진 리스트라고 볼 수 있다.
파이썬에서는 서로 다른 자료형이 더해지지(add) 않는다. (숫자/=문자)
때문에 형태를 통일해줘야 한다. but 곱셈은 반복으로 출력 가능하다.
a = [1, 2, 3]
print(str(3) + "hi")
리스트의 수정과 삭제 - 리스트의 값 수정하기
a = [1, 2, 3]
a[2] = 4 -> 인덱스를 가져와서 바꿔치기
리스트의 값 삭제하기 (슬라이싱 삭제도 가능)
a = [1, 2, 3]
del a[1]
리스트 관련 함수들 : 작동하도록 함수를 미리 만들어 놓고 실행하는 개념이다.
a. 리스트에 요소 추가하기 - append
a = [1, 2, 3]
a.append(4)
print(a)
b. 리스트 정렬 - sort
a.sort()
print(a) = 오름차순 정렬
c. 리스트 뒤집기 - reverse
a.sort()
a.reverse()
print(a) = 내림차순 정렬(응용)
d. 인덱스 반환 - index : find와 비슷하다.
a = [1, 2, 3]
print(a.index[3]) -> 3이 몇 번째 인덱스야?
결과 2 -> 존재하지 않는 값이면 오류난다.
e. 리스트에 요소 삽입 - insert (a와 비교하며 이해하기)
a = [1, 2, 3]
a.insert(1, 4) -> '1번째 인덱스'에 '4라는 값'을 추가하겠다.
print(a) -> 결과 [1, 4, 2, 3]
f. 리스트 요소 제거 - remove (첫 번째 값을 삭제하는 함수)
두 번 삭제하려면 두번 remove 하면 돼.
g. 리스트 요소 끄집어 내기 - pop (f와 비교하며 이해하기)
맨 끝의 값을 날린다. (단, 어떤 게 pop하고 튕겨나갔는지 확인가능)
a = [1, 2, 3]
print(a.pop()) -> 결과 3 -> 괄호에 인덱스 값 줄 수 있음.
print(a) -> 결과 [1, 2]
h. 리스트에 포함된 요소 x의 개수 세기 - count
a = [1, 2, 3, 1]
print(a.count(1)) -> 결과 2
i. 리스트 확장 - extend : 리스트가 펼쳐져서 추가된다. (a와 비교하기)
a = [1, 2, 3]
a.extend([4, 5])
print(a) -> 결과 [1, 2, 3, 4, 5] -> 리스트가 펼쳐져서 확장된 느낌.
a = [1, 2, 3]
a.append([4, 5])
print(a) -> 결과 [1, 2, 3, [4, 5]] -> 리스트 자체가 추가되었다.
막간 질문의 해답
append나 리스트 더하기(+)나 같음.
a+=[4] <- a=a+[4] 같은 말이다.
02-4 튜플 자료형 : ( )
리스트(서랍장)와 거의 비슷한데 변경이 불가능하다. = 변경이 안되는 리스트.
변경이 안된다는 개념의 의미는?
파이썬에서는 Mutable자료형이랑 Immutable자료형으로 나뉘어진다.
a. Mutable (변경가능한)
리스트, 딕셔너리, 집합
b. Immutable (변경이 불가능한)
정수, 실수, 문자열, 튜플
튜플은 기본적으로 소괄호로 나타낸다.
t1 = (1, 2, 3)
괄호가 없어도 기본적으로 튜플이다.
t2 = 1, 2, 3
리스트랑 마찬가지로 튜플안에 튜플을 쓸 수 있다.
t3 = ('a', 'b', ('ab', 'cd'))
요소별 구분할 때는 반드시 쉼표(,)를 붙여야 한다.
자료타입 'class tuple'
튜플의 가장 큰 특징 : 튜플은 삭제를 지원하지 않는다. 즉, 변경이 불가능하다.
del t1[0] -> 에러
→변경하면 안 될 데이터가 있을 때, 튜플로 감싸서 만들면 된다.
튜플 다루기는 리스트를 복습다고 생각하면 된다.
튜플은 인덱싱, 슬라이싱 모두 가능하다.
Q. 슬라이싱에서 헷갈리는 사람이 생길 수 있는데, 튜플을 잘라도 되나? 싶을 것이다.
t1 = (1, 2, 'a', 'b')
print(t1[1:])
(2, 'a', 'b')
A. 슬라이싱은 실제로 자르는 게 아니라 선택해서(잘라서) 보여주는 기능이다.
인덱스도 똑같다.
더하기도 됩니다. 변형이 불가능하다는데 어떻게 더하나요?
t1 = (1, 2, 'a', 'b')
t2 = (3, 4)
t3 = t1 + t2
print(t3)
(1, 2, 'a', 'b', 3, 4)
새로운 t3를 만드는 개념이기 때문에 변경하는 게 아니다.
질문 1. 리스트 + 튜플 = 타입에러
질문 2. t1만들고 t2를 만들고 다시 t1이라는 상자에 넣으면 t1이 재창조 됨.
질문 3. 튜플은 sort 정렬이 안된다.
질문 4. 튜플은 곱하기는 된다. → 변형이 아니라 생성이다.
질문 5. 튜플 길이 구하기 된다. → 변형이 아니라 생성이다.
불가능한 내장함수 : sort, insert, remove, pop
02-5 딕셔너리 자료형 : { }
key(키)와 value(값)로 이루어진 값이다. (종이 사전 같은 개념으로 이해)
연관배열이라고도 하고, Hash라고도 한다.
언제 활용되는가? API에 자주 활용된다.
데이터를 JSON 으로 전송한다는 말을 많이 하는데, JSON 도 딕셔너리의 한 형태이다.
자료타입 <'class dict'>
딕셔너리에 새로운 값 추가하기
a = {1: 'a'}
a[2] = 'b'
print(a)
{1: 'a', 2: 'b'}
a = {1: 'a'}
a[3] = [1, 2, 3]
print(a)
{1: 'a', 3: [1, 2, 3]}
*리스트에서 a[0] = 5 를 쓰면 바꿔치기가 되는데 딕셔너리에서는 추가가 된다.
딕셔너리 삭제하기
: del을 사용하여 키만 삭제하면 된다.
a = {1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3])
del a['name'] -> 삭제할 key를 선택한다.
print(a)
딕셔너리 한번에 삭제하기
: 여러개를 콤마(,)로 한꺼번에 나열한다.
a = {1: 'a', 2: 'b', 'name': 'pey', 3: [1,2,3]}
del a['name'], a[2]
print(a)
딕셔너리 사용 방법
: kay를 입력하면 value값을 찾는다.
dic = {'name': 'pey', 'phone': '010-9999-1234', 'birth: '1118'}
print(dic[birth]) -> key를 색인하면 value값이 뜬다.
딕셔너리 주의사항
a. key를 통해 value을 찾으니까 키는 무조건 중복없이 1개여야 한다.
b. 같은 이유로 키가 변형 가능하면 안된다. Immutable 자료형을 써야한다.
a. Mutable (변경 가능한)
리스트, 딕셔너리, 집합
b. Immutable (변경이 불가능한)
정수, 실수, 문자열, 튜플
c. value를 통해 key를 찾는 건 가능하지만? 절차가 필요하다.
딕셔너리 관련 함수들
1. key 리스트 만들기 - keys()
>>> dic = {'name': 'pey', 'phone': '010-9999-1234', 'birth: '1118'}
>>> print(a.keys())
dict_keys(['name', 'phone', 'birth']) → dict_keys라는 객체를 리턴한다.
특징은 dict_keys라는 객체를 리턴한다 : 리스트보다 메모리를 덜 차지한다.
리스트로 만들고 싶다면? 아래를 참고한다.
>>> dic = {'name': 'pey', 'phone': '010-9999-1234', 'birth: '1118'}
>>> print(list(a.keys()))
['name', 'phone', 'birth'] → list로 출력한다.
주로 반복문에 사용해서 딕셔너리 자료형의 key만을 뽑아낸다.
>>> for result in a.keys():
>>> print(result)
name
phone
birth
2. value 리스트 만들기 - values()
print(a.values())
3. key, value 쌍으로 얻기 - items()
: dict_items라는 리스트가 생기고 각각 값이 튜플에 들어간 형. 반복문 사용할 때 편리하게 자료를 뽑는다.
>>> print(a.items())
dict_items([('name', 'pey), ('phone', '010-9999-1234'), ('birth', '1118')])
4. key, value 쌍 모두 제거하기 - clear()
>>> dic = {'name': 'pey', 'phone': '010-9999-1234', 'birth: '1118'}
>>> a.clear() -> clear라는 함수이다.
>>> print(a)
{} -> 빈 딕셔너리가 나온다.
5. key로 value 얻기 - get()
1. 기존에 배운 방법
>>> print(a['name'])
2. 새로운 방법
>>> print(a.get('name'))
pey -> 둘의 값은 같다.
pey -> 둘의 값은 같다.
차이점은 없는 값을 찾을 때, 오류가 나는가? 안나는가?의 차이이다.
1. 기존에 배운 방법
>>> print(a['hi'])
2. 새로운 방법
>>> print(a.get('hi'))
KeyError: 'hi' -> 에러가 뜬다.
None -> None이라는 값이 나온다.
*string함수 중에 index와 find의 차이와 비슷하다.
사실, get에는 한가지 기능이 더 있다. True/False
>>> print(a.get('hi', '값이 없습니다"))
값이 없습니다 -> hi가 없을 때, 값이 없습니다 를 출력하란 의미
6. 해당 key가 딕셔너리 안에 있는지 조사하기 - in (=있니?)
: 값을 찾을 때 get을 써서 대체값을 줄 수도, 오류를 뱉게 할 수 도 있는데 더 간편한 in 이 있다.
>>>print('name' in a)
True -> 불자료형
의미 print('name' in a) → name 이라는 키가 a에 있니(=in)?
결과 'True' or 'False'
마지막으로 리스트와 딕셔너리를 비교해서 개념을 이해해보자면,
리스트가 인덱스가 0, 1, 2로 시작되는 딕셔너리라고 생각하면 쉽다.
>>> a = [1,2,3]
>>> print(a[0])
1
>>> a = {0: 1, 1:2, 2:3}
>>> print(a[0])
1
이렇게 리스트랑 거의 비슷하게 쓸 수 있다.
method 이런 건 다르지만 리스트가 index 0, 1, 2로 시작하는 딕셔너리로 개념을 이해하면 쉽다.
02-6 집합 자료형
집합의 자료형은 리스트로도 string으로도 만들 수 있다.
s1 = set([1, 2, 3]) -> 리스트를 set이라는 함수로 감싸다.
print(s1)
결과 {1, 2, 3} -> key, vlaue가 없는 그냥 값이 들어있는 것이 집합이다.
자료타입 : class 'set'
s1 = {1, 2, 3} 그냥 이렇게 중괄호로 만들어도 됨.
s1 = set("hello") -> 이렇게 문자열을 집합으로 만들면
print(s1)
결과 {'o', 'e', 'l', 'h'} -> 순서가 정해지지 않음. 랜덤.
집합의 2가지 특이 속성
a. 중복을 허용하지 않는다. 원소가 고유하다.
b. 순서 개념이 없음.
근데 굳이, indexing(값을 가져오고)하고 싶다면?
s1 = set([1, 2, 3]) 을 인덱싱하고 싶다면
l1 = list(s1) 리스트로 싸악 감싸줘서 자료형을 변환
결과 [1, 2, 3] 그래서
print(l1[0]) 하면
결과 1 이 나온다.
같은 방법으로 l1 = tuple(s1)해서 튜플로도 변환 가능.
그렇다면, 이 집합을 쓰는 이유는?
교집합, 합집합, 차집합
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
a. 교집합 print(s1 & s2) 또는 print(s1.intersection(s2))
집합의 개념을 활용할 일이 있을 때에는 파이썬만큼 편한게 없다.
b. 합집합 print(s1 | s2) 또는 print(s1.union(s2))
c. 차집합 print(s1 - s2) 결과는 {1, 2, 3} 집합형으로 나온다.
또는 print(s1.difference(s1))
활용하는 방법 예시
l1 = [1, 2, 2, 3, 3, 3, 3, 4] 리스트에서 중복을 제거하고 싶을 때
s1 = set(l1) set함수로 감싸서 출력하면
print(s1) -> 결과 {1, 2, 3, 4} -> 중복이 다 제거된다.
이 집합을 다시 리스트로 활용하고 싶다면?
l1 = list(set(l1)) -> s1을 li로 바꾸고 list로 감싸준다.
print(l1) 결과 -> [1, 2, 3, 4]
원래 순서 랜덤인데 이렇게 바꾸면 순서가 어느정도 유지된다.
집합 자료형 관련 함수
값 1개 추가하기 - add
리스트는 append였죠. 집합은 add이다.
s1 = set([1, 2, 3])
s1.add('a')
print(s1) -> 결과 {'a', 1, 2, 3}
값 여러 개 추가하기 - update
s1 = set([1, 2, 3])
s1.update([4, 4, 5, 6])
print(s1) -> 결과 {1, 2, 3, 4, 5, 6} -> 중복 제거됨.
특정 값 제거하기 - remove
s1 = set([1, 2, 3])
s1.remove(2) -> 여기서 중요한 건 index가 아니고 실값이다. 집합엔 index 없음.
print(s1) -> 결과 {1, 3}
끝
02-7 불 자료형
간단하다. 참(True) or 거짓(False)를 나타내는 '불'리언 자료형. 조지 불에서 따옴.
= '넣는다, 담는'는 의미이다.
== '같니? -> 물어보고 -> 값이 True or False 나온다.
만약 True 라면 print(a)를 실행해라'
a = "True" -> 'string' 과는 다르다.
a = True 의 print(type(a)) 를 보면 class 'bool' 불 자료형이 나온다.
반드시 첫 글자는 대문자다.
== 등호 두개를 쓰면 불 자료형이 나온다.
a = 1 == 1 -> 1은 1이랑 같니?
print(a) -> 결과 True
a = 1 == 2 -> 1은 2이랑 같니?
print(a) -> 결과 False
a = 1 < 2 -> 1은 2보다 작니? -> 부등호도 사용 가능하다.
print(a) -> 결과 True
자료형의 참과 거짓
참과 거짓이란 '속성'이 자료형마다 정해져 있고 실제로 자주 쓰인다.
a. 값이 있으면 - 참
b. 값이 없으면 - 거짓 (숫자는 1이상이면 참)
c. None 값도 - 거짓 이라는 속성이 있다.
자료형의 참과 거짓 - 예시로 반복문 사용을 보자.
a = [1, 2, 3, 4] 리스트가 있다.
while a: -> 리스트에 값이 존재하면 'True:'가 되고
while True: -> True면 아래를 출력한다.
print(a) -> 처음 결과는 [1, 2, 3, 4]
a.pop() -> 그 다음 마지막을 날려 [1, 2, 3]
반복하다가 a = [] -> 빈 리스트가 되면 값 없으니까 'False:'가 되어서
a = []
while False: -> 반복문을 빠져나간다.
참 거짓의 속성을 실제로 출력해볼 수 있다. bool을 사용한.
a = bool([1, 2, 3])
print(a) -> 결과 True
a = bool([ ])
print(a) -> 결과 False
02-8 자료형의 값을 저장하는 공간, 변수
a = 1
실제로 주소값을 'a'란 상자 안에 담는 거고, 메모리(RAM)에 실제적 값(객체=1)이 들어있다.
메모리 안에도 주소가 있고 이 주소 안에 값이 들어있다.
메모리 안에 있는 특정 주소 값을 변수가 가지고 있는 것이다.
변수 뒤의 값을 객체라고 하는데 이건 05장에서 자세히 배운다. 여기서 객체는 method나 함수 등을 쓸 수 있는 기능적인 단위이고, 객체를 저장하는 게 실제 변수의 개념이고, 이건 실제로 메모리에 저장되어 있고, 변수에 저장되어 있는 것은 주소다. 이 정도만 기억해두자.
print(id(a)) : a라는 리스트가 실제로 올라간 주소 값을 보는 함수
리스트를 복사하고자 할 때 흔하게 혼동하는 사례
a = [1, 2, 3]
b = a
print(id(a)) -> 둘의 주소가 같다.
print(id(a)) -> 둘의 주소가 같다.
해석 : [1, 2, 3]이라는 값이 생성되고 -> 그 주소가 a에 할당이 된 다음에 -> a는 그 주소 값을 b에 넣는 거니까 -> 같은 것을 바라보는 형태가 되는 것이다.
위 a, b의 주소값이 같은 지 직관적으로 비교할 수 있다.
print(a is b) -> 결과 True
값을 수정한다면? 변수의 주소값을 배운 이유
a = [1, 2, 3] -> a에 담긴 리스트
b = a -> b에 담는 건 a의 주소 값이다.
a[1] = 4 -> a를 변경해도 같은 것을 바라보고 있기 때문
print(a) -> 결과 [1, 4, 3]
print(b) -> 결과 [1, 4, 3] -> 결과는 같을 수 밖에 없다.
a와 b는 같은 주소를 바라보고 있다.
반대 독립적인 변수로 사용하려면?
a = [1, 2, 3] -> a에 담긴 리스트
b = a[:] or b=a[0] -> b에 담는 건 a의 슬라이싱 또는 index (새로 생성함.)
*a값을 복사해서 새로운 메모리에 등록하고 그 다음에 변수에 넣어주는 과정.
a[1] = 4 -> a만 변경된다.
print(a) -> 결과 [1, 4, 3]
print(b) -> 결과 [1, 2, 3] -> 결과가 다르다.
*a값을 복사해서 새로운 메모리에 등록하고 그 다음에 변수에 넣어주는 과정.
a. 슬라이싱(:) 이용
b. copy 모듈 이용 : 복사하는 기능을 가진 모듈이 있다 정도만 일단 알아두기.
기능을 누가 만들어 두고 가져와서 쓸 수 있게 된 건데 copy라는 함수를 이용함.
from copy import copy
a = [1, 2, 3]
b = copy(a) -> a와는 독립적인 변수가 된다.
c. copy 함수 사용하기
a = [1, 2, 3]
b = copy(a) -> 메모리에 독립적으로 값이 할당된다.
변수를 왜 쓰고, 메모리라는 개념을 왜 알아야하는지 예시를 통해 알아봤다.
메모리라는 개념을 도대체 왜 알아야만 하나? 실무에서 헷갈릴 수 있으니까 미리 경험하는 것이다.
'메모리 안에 값이 있고 그게 같은 주소를 바라본다.'의 개념이 이런 개념이라는 것을 알아두자.
변수를 만드는 여러가지 방법 : 파이썬에서도 편리한 기능이다.
a. 튜플로 만들기
a, b = ('phthon', 'life') -> 순서에 맞춰서 들어간다. (a, b)도 튜플이라고 볼 수 있음.
괄호 없고 기본적으로 연결된 건 튜플이라고 말했는데 -> 튜플 복습 시작해ㅜㅜ
a, b = 'phthon', 'life' -> 이렇게 해도 값이 같고, 앞 뒤로 괄호 있고 없고 똑같다.
b. 리스트로 만들기
[a, b] = ['phthon', 'life'] -> 순서에 맞춰서 들어간다.
c. 여러 개의 변수에 같은 값 대입하기
a = b = 'python'
d. a와 b를 바꾸고 싶을 때 -> 굉장히 편리함. 가끔 사용한다.
다른 언어는 temp라는 임시 변수를 만들어서 사용한다. 복잡해.
a,b = b,a -> 파이썬은 아주 간단하게 사용이 가능하다.
끝
잊지말 점
- 어떤 프로그래밍 언어든 그 언어의 자료형을 알고 있다면 이미 그 언어의 절반을 터득한 것이다 다름없다. 라는 말이 있다. 자료형이란 프로그래밍을 할 때 쓰이는 숫자, 문자열 등과 같이 자료 형태로 사용하는 모든 것을 뜻한다. 프로그램의 기본이자 핵심 단위가 바로 자료형이다. 계산 프로그램을 만들려면 어떤 것을 계산할 것인지부터 알아야 하고 테이터베이스 프로그램을 만들려면 어떤 자료를 저장할 것인지부터 알아야 하는 것처럼 기본 중의 기본이다. 따라서 자료형을 충분히 이해하지 않고 프로그래밍을 시작하려는 것은 기초 공사가 마무리되지 않은 상태에서 건물을 세우는 것과 같다.
시도할 점
- 튜플에서 딕셔너리 함수 전까지 복습 체크하기
'학습 > 팀스터디' 카테고리의 다른 글
파이썬 스터디 2주차 : 함수, 사용자 입출력, 파일 읽고 쓰기 (1) | 2024.01.08 |
---|---|
파이썬 스터디 3일차 : 03장 프로그램의 구조를 쌓는다! 제어문 (0) | 2024.01.01 |
파이썬 스터디 1일차 : 01장 파이썬이란 무엇인가 (1) | 2023.12.28 |
아티클 스터디 2주차(2) (0) | 2023.12.14 |
아티클 스터디 2주차(1) (1) | 2023.12.12 |