a=int(input('아무 문자열 입력 : '))
를 할 경우, a 변수에는 문자열이 정수형으로 타입이 바뀌어 저장됩니다. 변수 하나에 값을 저장할 때 바로 정수형을 사용해도 값이 저장되므로, 변수 두 개에 한 번에 값을 저장하더라도 예외가 없는게 상식적일 것입니다.
왜냐하면
a=input('아무 문자열 입력 : ')
a=int(a)
와
a,b=input('아무 문자열 입력 : ').split()
a=int(a)
b=int(b)
는 똑같은 과정으로 작동하기 때문입니다. 변수에 들어갈 값을 입력 받고 변수에 저장된 형태를 정수형으로 바꿔서 저장하는 과정으로 이해했습니다. 저는 그래서 int(input~~)도 두 번째 경우와 똑같이 값을 입력받아 그 줄에서 바로 정수형으로 변환하는 알고리즘으로 생각했습니다. 그래서 두 변수를 바로 정수형으로 저장할 때도 3번째 적은 코드처럼 동작할 줄 알았습니다.
예를 들어
a,b=int(input('아무 문자열 입력 : ').split())
제 추측대로라면 a와 b에 들어갈 값을 하나씩 차례로 입력한 후, 정수형으로 두 값을 변환한 뒤에, 순서대로 각각의 변수로 들어가야 할 것이었습니다. 하지만,
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
로 뜨면서 종료 되었습니다.
저는 혹시 변환한 뒤에 제가 생각지도 못한 과정이 있어 입력받은 값이 두 변수에 똑같이(값1, 값2)로 저장되어 그런 줄 알았습니다. 하지만 python에서
x=변수1, 변수2
를 입력할 경우 두 변수는 x에 모두 저장됩니다. 그렇기 때문에 한 변수에 두 값이 저장 되서 그런걸까라는 걱정은 하지 않아도 됩니다.
저는 이 부분에 대해서 오해를 풀고 싶습니다. 제가 이해하는 것이 올바른지도 질문드리고 싶네요.
변수는 값을 바꿀 수 있습니다.
>>> a = 10
>>> a
10
>>> a = 20
>>> a
20
>>>
파이썬은 여러 가지 편리한 문법을 제공하지만, 언어 전체를 학습하기 전에는 자칫 오해를 불러일으킬 수 있습니다.
>>> b = 10, 20
>>> b
(10, 20)
>>> b[0] = 50
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
b[0] = 50
TypeError: 'tuple' object does not support item assignment
>>>
b = 10, 20이 동작하는 것처럼 보입니다. 실제로 동작합니다.
b를 출력해보면 (10, 20)으로 출력됩니다. 리스트는 대괄호 []로 표시되고,
튜플은 괄호 ()로 표시됩니다.
튜플은 아직 학습 전입니다. 천천히 학습하세요. Unit 22에서 튜플을 설명합니다.
에러 메시지를 보면 'tuple' object라고 표시되어 있습니다. 튜플에는 item assignment, 아이템을 할당할 수 없다는 뜻입니다.
Unit 6.4.3을 보면 반복되는 int() 함수를 사용하는 대신 map 함수로 한 번에 처리하는 법을 소개합니다. 변수로 처리하려면 책에서 소개하는 방법을 따르세요. 이 책만의 특별한 방법이 아니라 파이썬에서 보편적으로 사용하는 방법입니다.