- 자료형 : 객체가 어떤 데이터로 이루어져 있으며 어떤 행위를 할 수 있는지 정해놓은 것
- 파이썬에서 int는 불변 객체이기 때문에 값을 바꾸려고 하면 객체를 새로 만들게 된다.
a = 1
id(a)
>>> 216
a = a + 1
id(a)
>>> 216이 아닌 다른 값!
- divmod(숫자, 나누려는 수) : 몫과 나머지를 한번에 구할 수 있음
divmod(17,3)
>>> (5,2)
10 / 2
>>> 5.0 # 결과가 float 형태
10 // 2
>>> 5 # 결과가 int 형태
a = 216
b = a
print(f"a's id: {id(a)}")
print(f"b's id: {id(b)}")
# a's id: 2586069048272
# b's id: 2586069048272
b가 가리키고 있는 정수 값을 바꾸게 되면 id 값이 달라진다.
b = b + 1
print(f"a's id: {id(a)}")
print(f"b's id: {id(b)}")
# a's id: 2586069048272
# b's id: 2586069048304
파이썬에서 int 자료형은 객체의 값을 바꿀 수 없는(immutable)한 자료형이기 때문이다.
따라서 새로운 값을 갖는 객체를 새로 만들기 때문에 id값이 달라진다.
|
Immutable(불변성) |
Mutable(가변성) |
Type |
int, float, bool, str, tuple |
list, dict, set |
- 리스트는 슬라이싱으로 대입이 가능하다
list_1[1:3]의 부분인 [1,2]가 ["A","B","C"]로 대체되었다.
list_1 = [0,1,2,3,4,5]
list_1[1:3] = ["A", "B", "C"]
list_1
>>> [0, 'A', 'B', 'C', 3, 4, 5]
- 더하기 연산자로 리스트에 리스트를 더하는 경우
list_1 = [1,2,3,4,5]
print(id(list_1))
list_1 = list_1 + ["추가"]
print(id(list_1))
# 1271728516608
# 1271729257920
그러나 += 로 더하는 경우는 id가 달라지지 않는다.
list_1 = [1,2,3,4,5]
print(id(list_1))
list_1 += ["추가"]
print(id(list_1))
# 1271728392320
# 1271728392320
- 가변 컨테이너에 가변 객체를 넣을 경우
새로운 리스트의 값만 수정하려고 해도 기존 리스트도 같이 바뀌게 된다.
list_1 = [["Hello"], [1,2,3]]
list_2 = list_1.copy()
list_2[0][0] = "Goodbye"
list_2[1][0] = 216
list_1, list_2
>>> ([['Goodbye'], [216, 2, 3]], [['Goodbye'], [216, 2, 3]])
- 문자열이나 리스트 같은 다른 시퀀스에서도 언패킹을 사용할 수 있다.
# 문자열
s = "AB"
a, b = s
# 리스트
l = [1,2,3]
a, b, _ = l # 일부를 사용하지 않는 부분은 _로 개수를 맞춰준다.
- 함수에서 반환 값을 여러개 반환하면 자동적으로 튜플로 반환한다.
- dict에 들어있는지 없는지 정확히 알지 못하는 key에 대해서는 get() 메서드를 사용하면 확인할 수 있다.
key가 존재하지 않을 경우는 에러 대신 None을 반환한다.
dict_1 = {
"A" : 216,
"B" : 829,
"C" : 906,
"D" : 806,
}
print(dict_1.get("E"))
>>> None
key가 존재하지 않는 경우, default값을 반환하도록 설정이 가능하다.
dict_1.get("E", "default")
>>> 'Default'
- break는 자신을 감싸고 있는 반복문만 깬다.
break는 if와 함께 사용되는 경우 if문을 깨고 나오는 것이 아니라 그 if문을 갖고 있는 반복문을 깨고 나온다.
for i in range(0, 999):
print(i)
if i == 2:
break
>>> 0
>>> 1
>>> 2
- for문과 while문 모두 else를 사용할 수 있다. 반복 루프가 break로 종료될 경우에는 else가 무시된다.
list_1 = [1,2,3,4,5,6]
for i in list_1:
print(i, end=" ")
if i == 4:
print("find 4")
break
else:
print("not find 4")
>>> 1 2 3 4 find 4
for i in range(3):
print("첫번째")
continue
print("두번째")
>>> 첫번째
>>> 첫번째
>>> 첫번째
- 왈러스 연산자 :=
변수에 값을 대입함과 동시에 표현식으로도 사용이 가능하다.
word = "stoneseller"
word := "StoneSeller"
>>> StoneSeller
왈러스 연산자를 사용하지 않은 경우)
while True:
word = input()
if word == "끝":
break
print(word)
왈러스 연산자를 사용한 않은 경우)
while (word := input()) != "끝":
print(word)