초격차캠프 백엔드 2일차: 파이썬 변수 할당 개념, float 계산 오차 발생 이유, 슬라이싱

임로빈·2023년 12월 8일

[1] 파이썬 vs C언어 변수 할당 개념

Python의 변수 할당 개념을 다른 언어와 비교해 설명해 주세요.

x, y 같은 변수(Variables)에 이름 혹은 값을 지정해서 메모리 공간에 저장하는 개념이다.
x는 내가 이름을 지어주기 전까지는 이름이 없다. 이대로 출력하면 뭐 어쩌라고 정의된 게 없다고 에러만 뜬다. 그런데 여기에 10이라는 값을 혹은 "개발자"라는 이름을 정의해주면, x를 출력할 때 내가 할당 즉, 저장한 값 혹은 이름이 나온다.
*None을 할당해서 빈 변수를 만들 수 있긴 하다. 그러면 아무 것도 출력되지 않는다!

파이썬과 가장 대조적인 컴파일 대표 C언어와 비교해보자.
파이썬은 객체 지향(Object-Oriented Programming, OOP) 언어로, 변수에 객체를 할당하여 그 객체값 혹은 이름을 참조한다. 파이썬 내의 모든 것은 객체이다.

C 언어는 대표적인 절차지향(Procedure-Oriented Programming, POP) 기법을 활용한다. 컴퓨터의 처리구조와 유사해 실행 속도가 빠른 장점이 있다.

1. 정적 타이핑 vs 동적 타이핑

C언어는 정적 타이핑 언어로, 변수를 선언할 때 명시적으로 타입을 지정해야 한다(=변수를 만들 때 미리 어느 데이터를 담을지 명시). 그에 반해, 파이썬은 동적 타이핑 언어로, 변수의 타입이 런타임에 동적으로 결정된다(미리 정하지 않아도 나중에 어떤 데이터를 넣어도 괜찮음).

2. 메모리 관리

C언어는 개발자가 메모리 할당, 해제를 수동으로(=직접) 관리해야 한다. 내가 직접 방을 치우고 정돈해야 한다는 뜻.
파이썬은 동적으로 메모리를 할당하고 가비지 컬렉션(Garbage Collection)에 의해 자동으로 해제된다. 청소 자동화 봇이 있다는 거다.

3. 레퍼런스 및 포인터

C 언어는 포인터를 사용하여 메모리 주소를 직접 조작할 수 있다.변수가 직접 데이터 주소를 갖고 있어 값을 변경하면 그 주소값도 바뀌는 것과 같다.
파이썬은 변수는 값 대신에 객체에 대한 레퍼런스를 가지고 있다. 데이터의 주소값을 직접 알려주는 것보다 그 위치를 알려주는 것과 같다. 그래서 값을 바꾸면 주소값이 아닌 위치값이 변하는 거라고 볼 수 있다.

4. 여러 변수에 동시 할당

C 언어는 여러 변수에 동시에 값을 할당하기 위해서는 여러 줄의 코드가 필요하다. 각 변수에 값을 따로 넣어줘야 해서 한 번에 많은 일을 하기 어렵다.
파이썬은 여러 변수에 동시에 값을 할당할 수 있어서 멀티 태스킹이 가능하다. C언어가 일대일만 가능한 메신저라면, 파이썬은 단톡으로 한번에 전달 가능하다고 볼 수 있다.

[ 요약 ]

파이썬은 유연하고 편리한 문법을 제공하지만, C 언어는 더 직접적이고 저수준의 메모리 조작을 할 수 있다. C 언어는 정직하게 절차를 밟아가며 부지런하게 직접 일을 수행하는 반면 파이썬은 편리하게 많은 일을 자동으로 처리해서 (주관적인) 효율중시파 일잘러 프로그램으로 볼 수 있다.

[2] 실수형(float) 계산 시 오차 발생 원인

Python의 실수형(float) 계산 시 오차가 발생하는 이유에 대해 간단히 설명해 주세요.

파이썬의 실수형(float)에서 발생하는 오차는 부동 소수점 방식의 특성으로 인해 발생한다. 컴퓨터에서 소수를 표현하는 방식은 이진 부동 소수점 표현법을 사용하는데, 이 방식은 정확한 십진 표현이 아니라 근사 값을 사용한다.

이진 부동 소수점 표현 방식, 유한한 비트 수, 소수의 이진 표현의 한계, 연산 순서에 따른 미세한 차이 등 원인 때문이다.

한 마디로, 컴퓨터가 사용하는 언어는 2진수라서 10진수가 수를 표현하는 방식과 다르다 보니 미세한 오차가 발생한다는 거다. 예로, 1/3을 소수로 표현하는 게 귀찮아서 0.3333... 으로 표현하는 것처럼, 컴퓨터도 특정한 소수를 정확히 표현하지 못할 때가 있다.

위 이유로 부동 소수점 연산에서는 정확한 값을 기대하기 어렵다. 따라서 실수형을 비교할 때는 어느 정도의 오차를 허용하는 방법을 사용하거나, Decimal 등과 같은 정확한 십진 연산을 지원하는 데이터 타입을 사용하는 것이 좋다.

[3] 슬라이싱 개념

슬라이싱에 대해 간단히 설명해 주세요.

파이썬에는 문자열, 리스트에서 원하는 값을 추출할 때 인덱싱(Indexing)과 슬라이싱(Slicing)을 활용한다.

인덱싱은 몇 번째인지 값을 아예 특정하는 반면, 슬라이싱은 시작점과 직전 기준을 지정해서 [어디부터:어디 '전'까지]를 슬라이스하는(잘라주는) 개념이다. 인덱싱이 출석번호를 하나만 부르는 거라면, 슬라이싱은 오늘 주번 몇 번부터 몇 번까지로 범위를 지정한다.

파이썬에서 순서는 1이 아닌 0부터 시작하는데(영국, 독일처럼 1층이 G층인 거라고 생각하자), "python is my life" 단어를 기준으로 순서를 매겨보자면 아래와 같다.

p y t h o n _ i s _ m   y  _  l i f e
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
*점(.) 같은 부호나 공백도 개수에 포함한다. 

p가 첫 번째이므로 0번이고, 그 다음부터 순서대로 매긴다.
x = "python is my life" 문장에서 python만 출력하고 싶을 때, 아래처럼 코드를 작성하면 된다.

x = "python is my life" 
print(x[0:6])
>>> python

참고.

오늘의 일기
다른 과제 혼자서 씨름하다가 시간 다 보냈다..
좀 있다 해야지 하면서 다른 것 좀 했더니 벌써 잘 시간이다. 미치겠음ㅋㅋ
AI의 도움을 받으면 훨씬 빨리 끝나는데, 
혼자 사고하는 힘을 좀 기르려다가 허리 나가는 중.
영작 공부할 때 번역기를 남용하면 실력이 잘 안 느는 것처럼 코딩도 그런 것일까 생각듦.
괜한 걱정이면 그냥 지체 않고 바로 chatgpt한테 헬프칠 텐데, 
약간의 힌트만 필요한 상태까지 도달하는 여정이 꽤 험난하다. 
# True / False

# 수익성 >= 60
# 창의성 + 시장성 >= 50
# (시장성 + 수익성)/2 > 안정성

# 창의성 = 62
# 시장성 = 71
# 안정성 = 68
# 수익성 = 66

# 1. 66 >= 60 True
# 2. 62 + 71 >= 50 True
# 3. (71 + 66)/2 > 68 True
# Total : 1 and 2 and 3 = True 나와야
# print(total)

~~~ 조건에 부합하면 합격잉게 True 나오게 해봐라는 문제인데,
나름 논리적으로 사고하려고 과정을 써봄.. 근데 그러고 어케 하더라 사고 멈춤.
특히 오늘 이거 마지막 문제 더 간결하게 할 방법 없나 고민하다가 시간 엄청 보냄 ㄱ-
다 나의 피가 되고 살이 되리라..(제발
profile
https://readyoun.tistory.com/

5개의 댓글

comment-user-thumbnail
2024년 10월 1일

It’s fascinating how the game pushes me to refine my skills and stay focused, and every time I think I’ve got it down, the slope game game introduces new challenges

답글 달기
comment-user-thumbnail
2025년 1월 22일

[http://example.com/ Key][http://example.com/|Key]]
This link

Key: http://example.com/
[url=https://example.com/]example[/url]
"This link":http://example.com/

답글 달기
comment-user-thumbnail
2025년 6월 4일

As you stay physically flexible this summer, don’t forget that your brain needs agility too, Color Rush trains both, combining motion and mental speed in one colorful package. color rush

답글 달기
comment-user-thumbnail
2025년 10월 3일

In Day 2 of the 초격차캠프 backend course, we delve into Python variable assignment, exploring the reasons behind float calculation errors. Understanding these core concepts is crucial for effective programming. As a fun way to enhance learning, try taking breaks by playing Slope , a game that sharpens your reflexes and problem-solving skills while keeping your mind engaged.

답글 달기
comment-user-thumbnail
2025년 10월 3일

In Day 2 of the 초격차캠프 backend course, we delve into Python variable assignment, exploring the reasons behind float calculation errors. Understanding these core concepts is crucial for effective programming. As a fun way to enhance learning, try taking breaks by playing Slope , a game that sharpens your reflexes and problem-solving skills while keeping your mind engaged.

답글 달기