신입 AI개발자가 준비하는 30가지 Python 면접 기초 개념

WebAIMaster·2023년 5월 3일
3

면접 준비

목록 보기
3/6

리스트, 튜플, 딕셔너리, 집합의 차이점

  • 리스트(list) : 변경 가능한(mutable) 순서가 있는 데이터 구조이다. 대괄호([])를 사용하여 정의하며, 중복된 값이 포함될 수 있다.
  • 튜플(tupe) : 변경 불간으한(immutable) 순서가 있는 데이터 구조이다. 소괄호(())를 사용하여 정의하며, 중복된 값이 포함될 수 있다.
  • 딕셔너리(dictionary) : 변경 가능한(mutable) 순서가 없는 데이터 구조로, 키와 값의 쌍으로 이루어져 있다. 중괄호({})를 사용하여 정의하며, 키는 중복될 수 없다.
  • 집합(set) : 변경 가능한(mutable) 순서가 없는 데이터 구조로, 중복된 값을 포함할 수 없다. 중괄호({})를 사용하여 정의한다.

람다 함수란 무엇인가?

람다 함수는 이름 없는(익명) 한 줄짜리 함수이다. 간단한 작업을 수행하는 함수를 생성할 때 사용되며, 람다 함수는 재사용이 필요하지 않은 경유 유용하다. lambda 키워드를 사용하여 정의한다. 코드의 형식은 다음과 같다. lambda 매개변수:결과

pass와 continue의 차이는 무엇인가?

  • pass는 아무 작업도 수행하지 않는 키워드 이다. 빈 블록을 정의하는데 사용된다. pass를 사용하면 코드의 실행 흐름이 다음 문장으로 넘어간다.
  • continue는 반복문의 실행 중 현재 반복을 중단하고 다음 반복으로 넘어가는 키워드이다. for loop나 while loop에서 사용된다.

파이썬의 장단점은 무엇인가

장점

  • 문법이 간결하고 읽기 쉽다.
  • 다양한 라이브러리와 패키지로 인해 다양한 분야에서 활용할 수 있다.
  • 커뮤니티가 크가 활발하여 도움을 받기 쉽다.

단점

  • 다른 언어에 비해 실행 속도가 느릴 수 있다.
  • 모바일 애플리케이션 개발에는 적합하지 않다.
  • GIL(Global Interpreter Lock)로 인해 멀티코어 환경에서의 병렬 처리에 제한이 있다.

Numpy와 Pandas의 차이점은 무엇가?

Numpy는 수치 데이터를 다루기 위한 고성능 다차우너 배열 객체인 ndarray를 제공하고, 배열에 대한 수학적 연산을 수행하는 라이브러리이다. 선형대수, 통계, 푸리에 변환 등의 기능을 제공한다. Numpy는 벡터화도니 연산을 지우너하여 빠른 처리가 가능하다.

Pandas는 데이터 분석 및 조작을 위한 라이브러리로, DataFrame과 Series와 같은 데이터 구조를 제공한다 데이터를 쉽게 필터링, 정렬, 그룹화하고, 결측치를 처리하거나 통계를 계산하는 기능을 제공한다. Pandas는 테이블 형태의 데이터를 다루기에 적합하며, Numpy를 기반으로 만들어 졌다.

Numpy와 Pandas의 주요 차이점은 다음과 같다.

  • Numpy는 주로 다차우너 배열을 처리하는 데 사용되고, Pandas는 테이블형태의 데이터를 처리하는 데 사용된다.
  • Numpy는 수치 데이터에 최적화되어 있고, Pandas는 다양한 유형의 데이터를 처리할 수 있다
  • Pandas는 데이터 조작 및 분석을 위한 편리한 기능을 제공하며, Numpy는 수학적 연산에 초점을 맞추고 있다.

Python에서 상속이란 무엇인가?

상속은 객체 지향 프로그래밍에서 한 클래스의 속성과 메서드를 다른 클래스가 이어받는 기능이다. 상속을 통해 코드의 재사용성을 높이고, 모듈화를 쉽게 할 수 있다. Python에서 상속은 class ChildClass(ParentClass):와 같은 형식으로 구현할 수 있다.

리스트에서 중복값을 제외하려면 어떻게 해야하는가?

리스트에서 중복값을 제외하려면, 집합(set) 자료형을 활용할 수 있다. 예를들어 unique_list = list(set(original_list))처럼 사용하여 중복값이 제거된 새로운 리스트를 얻을 수 있다.

컴파일 언어와 인터프리터 언어의 차이점은 무엇인가?

컴팡리 언어는 코드를 기계어로 번역하는 컴파일 과정을 거친 후 실행되며, 이 과정에서 발생하는 오류를 수정해야 한다. 컴파일 언어의 예로는 C, C++, Java등이 있다. 인터프리터 언어는 코드를 한 줄씩 실행함녀서 해석하는 방식으로 오류가 발생하면 해당 지점에서 프로그램이 중단된다. 인터프리터 언어의 예로는 Python, JavaScript, Ruby등 이 있다.

.pyc 파일과 .py 파일과 .ipynb의 차이점은 무엇인가?

  • .py 파일은 Python 소스 코드 파일로, 텍스트 형식으로 저장되어 있다.
  • .pyc 파일은 Python 소스 크드가 컴파일된 바이트코드 파일로, Python 인터프리터가 빠르게 실행할 수 있도록 변환된 형태이다.
  • .ipynb 파일은 Jupyter Notebook에서 사용되는 파일로, 코드와 텍스트, 그래프 등을 함께 저장할 수 있는 JSON 형식의 파일이다. 대화형으로 코드를 실행하고 결과를 확인할 수 있어, 데이터 분석이나 머신러닝 과정을 시각적으로 보여주기에 적합하다

함수, 클래스, 객체 개념에 대해서 설명하시오.

  • 함수 : 코드의 재사용성을 높이기 위해 작성된 특정 긴으을 수행하는 코드 블록이다. 함수는 입력 값을 받아 처리한 결과를 반환할 수 있다.
  • 클래스 : 객체 지향 프로그래밍에서 사용되는 설계도록, 속성(attribute)과 메서드(method)를 정의한다. 클래스를 통해 객체를 생성할 수 있으며, 동일한 클래스로부터 생성된 객체들은 같은 속성과 메서드를 확장하거나 수정할 수 있어 다형성을 구현할 수 있다. 이러한 클래스의 특성을 활용하여 각 컴포넌트들이 독립적으로 작동하면서도 서로 협력하는 프로그램으로 구현할 수 있다.
  • 객체(Object) : 클래스를 통해 생성된 인스턴스로, 클래스에서 정의된 속성과 메서드를 가지고 있다. 객체는 독립적으로 상태와 행동을 관리할 수 있으며, 객체 간에 메시지를 주고받아 상호작용을 할 수 있다. 객체 지향 프로그래밍의 핵심은 객체들이 함께 작동하여 프로그램을 구성하는 것이다.

함수, 클래스, 객체의 관계를 요약하면 함수는 특정 기능을 수행하는 코드 블록이며, 클래스는 객체의 설계도 역할을 하고, 객체는 클래스를 통해 생성되어 독립적으로 상태와 행동을 관리한다. 이를 통해 프로그램을 모듈화하고 코드의 재사용성을 높일 수 있다.

인터프리터와 컴파일의 차이점은 무엇인가?

인터프리터는 프로그램을 실행할 때 소스 코드를 한 줄씩 해석하며 실행ㅎ나다. 따라서 실행 시간이 오래 걸리지만, 개발과 디버깅이 쉽다. 파이썬은 대표적인 인터프리터언어이다. 컴파일러는 프로그램을 실행하기 전에 소스 코드를 기계어로 번역하여 목적 파일을 생성한다. 이로 인해 실행 시간이 빠르지만 개발과 디버깅이 어렵다. C, C++이 대표적인 컴파일 언어이다.

파이썬의 기본 자료형에는 어떤 것이 있나?

파이썬의 기본 자료형에는 정수(int), 실수(float), 문자열(str), 불린(bool)이 있다. 이외에도 리스트, 튜플, 딕셔너리, 집합 등의 컬렉션 자료형이 잇다.

변수와 상수의 차이점은 무엇인가?

변수는 프로그램 실행 도중 값이 변경될 수 있는 저장 공간을 의미한다. 상수는 값이 변하지 않는 저장 공간을 의미하며, 일반적으로 대문자로 표기한다. 파이썬은 상소를 내장하지 않지만, 개발자들은 관례적으로 대문자로 표기하여 상수임을 명시한다.

가비지와 컬렉션의 개념과 작동 원리는 무엇인가?

가비지 컬렉션은 프로그램 실행 도중 사용하지 않는 메모리를 자동으로 회수하는 메커니즘입니다. 파이썬의 경우, 참조 카운터를 사용하여 객체에 대한 참조 횟수를 세고, 참조 카운트가 0이 되면 메모리를 회수합니다. 또한, 순환 참조를 처리하기 위해 가비지 컬렉터를 사용합니다.

얕은 복사와 깊은 복사의 차이

얕은 복사는 객체의 최상위 요소를 복사하지만, 내부 요소는 원본과 동일한 참조를 가리킵니다. 깊은 복사는 객체의 모든 요소를 재귀적으로 복사하여 완전히 독립적인 복사본을 생성합니다. 파이썬에서는 copy 모듈의 shallow() 함수를 사용하여 얕은 복사를, deepcopy() 함수를 사용하여 깊은 복사를 수행할 수 있습니다.

멀티스레딩과 멀티프로세싱의 차이점

멀티스레딩은 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 기법입니다. 스레드는 같은 프로세스의 메모리를 공유하므로, 메모리 사용이 효율적입니다. 그러나 파이썬에서 GIL 때문에 CPU-bound 작업에서 병목 현상이 발생할 수 있습니다. 멀티프로세싱은 여러 개의 독립적인 프로세스를 동시에 실행하는 기법입니다. 각 프로세스는 독립된 메모리 공간을 가지므로, GIL의 영향을 받지 않아 CPU-bound 작업에서 더 효율적일 수 있습니다. 그러나 프로세스간 메모리를 공유하기 어렵고, 통신 오버헤드가 발생할 수 있습니다.

동시성과 병렬성의 차이점

동시성은 여러 작업이 동시에 실행되는 것처럼 보이는 것을 말합니다. 실제로는 작업들이 시간을 나눠서 번갈아 실행되지만, 사용자에게는 동시에 진행되는 것처럼 느껴집니다. 병렬성은 여러 작업이 실제로 동시에 실행되는 것을 말합니다. 멀티코어 프로세서를 사용할 때 여러 개의 코어가 동시에 작업을 처리할 수 있어 병렬 실행이 가능합니다.

CIL(Golbal Interperter Lock)이란 무엇인가?

GIL은 파이썬 인터프리터가 한 번에 하나의 스레드만 실행할 수 있도록 제한하는 메커니즘입니다. 이는 메모리 관리와 객체의 동기화를 간단하게 만들어주지만, 멀티스레딩 환경에서 CPU-bound 작업의 성능을 저하시킬 수 있습니다.

*args와 **kwargs의 사용법과 차이점은 무엇인가?

*args는 함수에 가변 개수의 위치 인자를 전달하는 데 사용됩니다. 이를 통해 함수는 몇 개의 위치 인자가 오든 처리할 수 있습니다. 반면, **kwargs는 함수에 가변 개수의 키워드 인자를 전달하는 데 사용됩니다. 이를 통해 함수는 몇 개의 키워드 인자가 오든 처리할 수 있습니다.

제너레이터와 이터레이터의 차이점은 무엇인가?

이터레이터는 iter()와 next() 메소드를 구현한 객체입니다. 이터레이터를 사용하여 순차적으로 컬렉션의 요소에 접근할 수 있습니다. 이터레이터는 메모리를 효율적으로 사용할 수 있지만, 사용자 정의 이터레이터를 만들려면 별도의 클래스를 작성해야 할 수도 있습니다.

제너레이터는 이터레이터를 더 쉽게 생성하는 방법으로, 함수 내부에 yield 키워드를 사용하여 구현합니다. yield를 사용하면 함수의 실행을 일시 중단하고, 다음 호출 시 중단된 지점부터 계속 실행할 수 있습니다. 이를 통해 메모리를 더 효율적으로 사용할 수 있으며, 이터레이터에 비해 코드가 간결하고 가독성이 높아집니다. 그러나 제너레이터는 상태를 유지하므로, 일반 함수에 비해 구현이 복잡할 수 있습니다.

리스트 컴프리헨션을 사용하는 이유와 방법을 설명하시오

리스트 컴프리헨션은 리스트를 생성하는 간결하고 가독성 높은 방법입니다. for 문이나 다른 반복문을 사용하는 것보다 코드가 짧아지고, 실행 시간도 일반적으로 더 짧습니다. 리스트 컴프리헨션을 사용하는 방법은 다음과 같습니다. [expression for item in iterable if condition] 예를 들어, 0부터 9까지의 제곱값을 구하는 리스트 컴프리헨션은 다음과 같습니다. squares = [x * x for x in range(10)]

정규 표현식을 다루는 방법을 설명하시오

Python에서 정규 표현식을 다루기 위해 re 모듈을 사용합니다. 주요 함수들은 search(), match(), findall(), finditer(), sub(), split() 등이 있습니다. 정규 표현식을 사용하여 문자열에서 패턴을 찾거나, 대체하거나, 나누는 등의 작업을 수행할 수 있습니다.

메모리 관리는 어떻게 이루어지나

Python은 가비지 컬렉션(GC) 메커니즘을 사용하여 메모리를 관리합니다. 가장 일반적인 GC 방법은 참조 카운팅입니다. 객체에 대한 참조가 더 이상 없으면 메모리가 해제됩니다. 또한, 순환 참조 같은 메모리 누수 문제를 방지하기 위해 generational GC 알고리즘도 사용됩니다.

예외 처리를 하는 방법을 설명하시오.

예외 처리를 위해 Python에서는 try, except, finally, else 키워드를 사용합니다. try 블록에서 예외가 발생할 수 있는 코드를 작성하고, except 블록에서 예외를 처리합니다. finally 블록은 예외 발생 여부와 관계없이 항상 실행되는 코드를 작성합니다. else 블록은 예외가 발생하지 않을 때 실행되는 코드를 작성합니다.

파일 입출력을 하는 방법은 어떻게 되는가?

Python에서 파일 입출력을 위해 open() 함수를 사용하여 파일을 엽니다. 파일을 열 때는 파일 모드를 지정할 수 있습니다. (예: 읽기 모드 'r', 쓰기 모드 'w', 추가 모드 'a', 이진 모드 'b' 등) 파일 작업을 완료한 후에는 close() 메서드를 사용하여 파일을 닫습니다. with 문을 사용하면 파일이 자동으로 닫히므로 권장되는 방식입니다.

모듈과 패키지의 차이점은 무엇인가?

모듈은 Python 파일입니다. 이 파일에는 Python 코드, 변수, 함수, 클래스 등이 포함될 수 있습니다. 다른 Python 코드에서 import 문을 사용하여 모듈을 가져올 수 있습니다.

패키지는 여러 모듈을 구조화하는 방법입니다. 패키지는 디렉토리 구조로 구성되며, 각 디렉토리에는 init.py 파일이 포함되어 있습니다. 이 파일은 해당 디렉토리가 패키지의 일부임을 Python에 알려줍니다. 패키지를 사용하면 관련된 모듈을 논리적으로 그룹화하여 코드의 재사용성과 가독성을 높일 수 있습니다. 패키지에서 모듈을 가져오려면 import 문을 사용하고, 점 표기법으로 패키지와 모듈을 지정합니다.

예를 들어, 패키지 my_package 안에 모듈 my_module이 있다고 가정할 때, 다음과 같이 가져올 수 있습니다. import my_package.my_module / from my_package import my_module

파이썬의 메타클래스(meta-classes)는 무엇이며, 어떻게 사용하나요?

메타클래스는 클래스의 클래스로, 클래스의 행동을 정의하는데 사용됩니다. 메타클래스를 사용하면 클래스 생성 과정을 사용자 정의할 수 있으며, 이를 통해 동적으로 클래스를 생성하거나 수정할 수 있습니다. type 함수를 사용하여 메타클래스를 정의할 수 있습니다.

Python에서 메모이제이션(memoization)이란 무엇이며, 어떻게 구현하나요?

메모이제이션은 컴퓨팅 결과를 캐시에 저장하여 동일한 입력에 대한 계산을 반복하지 않도록 함으로써 프로그램의 실행 시간을 줄이는 최적화 기법입니다. 파이썬에서는 functools.lru_cache 데코레이터를 사용하여 메모이제이션을 쉽게 구현할 수 있습니다.

Python에서 동적 타이핑(dynamic typing)과 정적 타이핑(static typing)의 차이점은 무엇인가요?

동적 타이핑은 변수의 타입이 실행 시점에 결정되는 방식입니다. 파이썬은 기본적으로 동적 타이핑 언어입니다. 정적 타이핑은 변수의 타입이 선언 시점에 결정되는 방식입니다. 파이썬 3.5부터 typing 모듈을 사용하여 타입 힌팅(type hinting)을 통해 정적 타이핑을 지원합니다.

Python의 GIL(Global Interpreter Lock)이란 무엇이며, 왜 문제가 되는지 설명해주세요.

GIL은 파이썬 인터프리터에서 스레드간의 동시 접근을 제한하기 위해 사용되는 동기화 메커니즘이며, 한 번에 하나의 스레드만 실행되도록 합니다. 이로 인해 멀티 스레딩을 사용해도 병렬 처리가 제한되어 CPU 병렬성을 최대한 활용할 수 없게 됩니다. GIL 문제를 해결하기 위해 멀티프로세싱 모듈을 사용하거나 GIL을 회피하는 C/C++ 확장을 사용할 수 있습니다.

0개의 댓글