백엔드 면접 대비 - 파이썬 #1

김지현·2025년 8월 8일
0

리스트와 튜플의 차이

리스트는 가변, 튜플은 불변이다. 튜플은 딕셔너리 키로 사용할 수 있다.

lst = [1, 2, 3]
tpl = (1, 2, 3)

lst[0] = 9       # 가능
tpl[0] = 9       # TypeError 발생

GIL이란?

GIL(Global Interpreter Lock)은 하나의 스레드만 파이썬 바이트 코드를 실행하도록 하는 락이다. 멀티 스레딩의 성능을 제한하지만, IO-bound 작업에는 유리하다. 파이썬은 스레드에 대해 안정성 있는 접근을 보장하기 위해 GIL을 사용한다.

global과 nonlocal의 차이

global은 전역 변수를 참조, 수정할 때 사용한다.
nonlocal은 중첩 함수에서 상위 함수의 지역 변수를 참조, 수정할 때 사용한다.

x = 0

def outer():
    y = 1
    def inner():
        nonlocal y
        y = 10
    inner()
    print(y)  # 10

def change():
    global x
    x = 100

outer()
change()
print(x)  # 100

데코레이터란?

데코레이터는 기존의 함수를 수정하지 않고 기능을 확장하는 함수이다.

def logger(func):
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__}")
        return func(*args, **kwargs)
    return wrapper

@logger
def greet():
    print("Hello")

greet()

# 결과
Calling greet
Hello

예외 처리 실행 순서

Q. try-except-else-finally의 실행 순서는?

try : 예외 발생의 가능성이 있는 코드
except : 예외 발생시 실행
else : 예외가 없을 때 실행
finally : 예외와 무관하게 실행

컴프리헨션의 장점

리스트, 딕셔너리 컴프리헨션은 간결하고 효율적으로 새로운 컬렉션을 생성 할 수 있도록 한다. 반복문보다 빠르고 직관적이다.

squares = [x*x for x in range(5)]
evens = {x: x%2 == 0 for x in range(5)}

call by

함수의 파라미터를 받을 때, call by value는 변수에 담긴 값 자체를 스택에 복사하여 넘겨준다. call by reference는 변수가 가리키는 메모리 주소(참조) 값을 전달한다. 파이썬은 Call by Object Reference 또는 Call by Assignment 방식을 사용한다. Call by Object Reference란 함수에 객체의 주소를 전달하되, 그 참조 자체는 값처럼 복사되는 것이다. 이로 인해 가변 객체는 함수 내부에서 변경이 원본에 반영되어 변경 가능한 것이고, 불변 객체는 그렇지 않은 것이다.

def change(x):
    x = x + 1
    print("inside:", x)

a = 10
change(a)
print("outside:", a)

# 결과
inside: 11		# 새로운 int 객체를 생성하여 x에 바인딩
outside: 10		# int는 불변 객체이므로 outside의 a는 변경되지 않음

---

def modify(lst):
    lst.append(4)
    print("inside:", lst)

my_list = [1, 2, 3]
modify(my_list)
print("outside:", my_list)

# 결과
inside: [1, 2, 3, 4]
outside: [1, 2, 3, 4]	# list는 가변 객체이므로 outside에 수정 사항이 반영됨
profile
Server Developer

0개의 댓글