ETC

[Python] 자료형

StoneSeller 2022. 6. 21. 23:54
  • 자료형 : 객체가 어떤 데이터로 이루어져 있으며 어떤 행위를 할 수 있는지 정해놓은 것

 

  • 파이썬에서 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

 

  • continue는 루프의 시작으로 돌아간다.
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)

 

728x90