본문 바로가기
728x90

Python379

[PYTHON] 객체 복사의 2가지 메커니즘 : copy와 deepcopy의 내부 순회 방식 차이 해결 파이썬에서 가변 객체(Mutable Objects)를 다룰 때 가장 흔하게 발생하는 실수 중 하나는 '참조 복사'와 '실제 복사'를 혼동하는 것입니다. 단순히 리스트나 딕셔너리를 복사했다고 생각했지만, 원본 데이터를 수정했을 때 복사본까지 함께 변경되는 당혹스러운 경험을 해보셨을 것입니다. 본 가이드에서는 파이썬의 copy 모듈이 내부적으로 객체를 어떻게 트리 구조로 탐색하고 복제하는지, 그 기술적 깊이를 분석하여 데이터 무결성을 지키는 방법을 제시합니다.1. 객체 복사의 근본적 이유와 메모리 참조파이썬의 모든 것은 객체입니다. 변수는 객체를 담는 그릇이 아니라 객체의 메모리 주소를 가리키는 '포인터'에 가깝습니다. 따라서 b = a와 같은 할당문은 객체를 복사하는 것이 아니라 주소값만 전달합니다. 이를.. 2026. 3. 3.
[PYTHON] 객체 생성의 비밀 2단계 : __new__와 __init__의 실행 순서 및 활용 방법 차이 해결 파이썬에서 클래스를 정의하고 인스턴스를 생성할 때, 대부분의 개발자는 __init__ 메서드가 가장 먼저 호출된다고 생각합니다. 하지만 파이썬의 객체 생성 매커니즘은 생각보다 정교하며, 실제로는 생성(Construction)과 초기화(Initialization)라는 두 가지 명확한 단계로 나뉩니다. 이 과정을 이해하는 것은 싱글톤 패턴 구현, 불변 객체(Immutable Object) 커스텀, 또는 메타프로그래밍을 다루는 시니어 개발자에게 필수적인 지식입니다. 본 글에서는 __new__와 __init__의 내부 동작 차이를 완벽하게 분석합니다.1. 객체 생성의 타임라인: 누가 먼저인가?파이썬에서 obj = MyClass()를 실행하면 내부적으로 두 개의 매직 메서드가 순차적으로 호출됩니다. 첫 번째는 메.. 2026. 3. 3.
[PYTHON] yield from 구문이 재귀적 제너레이터 구조에서 해결하는 3가지 복잡성 문제와 최적화 방법 파이썬의 비동기 프로그래밍과 데이터 스트리밍 처리에서 제너레이터(Generator)는 핵심적인 역할을 수행합니다. 특히 복잡한 트리 구조나 중첩된 리스트를 탐색할 때 재귀적 제너레이터는 매우 강력한 도구가 됩니다. 하지만 파이썬 3.3 이전에는 중첩된 반복문을 처리하기 위해 불필요한 코드가 반복되는 문제가 있었습니다. 본 글에서는 전문가의 시점에서 yield from 구문이 재귀적 구조에서 발생하는 통신 및 성능 문제를 어떻게 해결하는지 심층적으로 분석합니다.1. 기존 방식의 한계: 중첩 루프의 오버헤드과거 파이썬에서 하위 제너레이터(Sub-generator)의 값을 상위로 전달하기 위해서는 명시적으로 for 루프를 사용해야 했습니다. 이는 단순히 코드가 길어지는 문제뿐만 아니라, 양방향 데이터 전달(s.. 2026. 3. 2.
[PYTHON] Protocol (PEP 544)을 이용한 구조적 타이핑 구현 방법과 명시적 상속의 3가지 차이점 해결 파이썬은 전통적으로 '덕 타이핑(Duck Typing)'의 언어였습니다. "오리처럼 걷고 오리처럼 운다면 그것은 오리다"라는 철학은 유연한 개발을 가능하게 했지만, 대규모 프로젝트에서는 정적 분석의 어려움이라는 문제를 야기했습니다. 이를 해결하기 위해 등장한 것이 바로 PEP 544의 Protocol입니다. 본 글에서는 전문가의 시각에서 구조적 타이핑(Structural Typing)을 구현하는 구체적인 방법과 기존 추상 베이스 클래스(ABC)와의 결정적 차이를 분석합니다.1. 구조적 타이핑(Structural Typing)이란 무엇인가?일반적인 자바나 C#의 인터페이스는 '명시적 타이핑(Nominal Typing)'을 따릅니다. 즉, 클래스가 특정 인터페이스를 구현한다고 선언해야만 해당 타입으로 인정받.. 2026. 3. 2.
[PYTHON] nonlocal 키워드와 global 키워드의 3가지 스코프 제어 차이와 변수 오염 해결 방법 파이썬 프로그래밍을 진행하다 보면 함수 내부에서 외부 변수의 값을 수정해야 하는 상황을 마주하게 됩니다. 이때 초보 개발자들이 가장 흔히 저지르는 실수는 단순히 변수 이름을 호출하여 값을 할당하려 하는 것입니다. 하지만 파이썬의 LEGB(Local, Enclosing, Global, Built-in) 스코프 규칙에 따라, 명시적인 키워드 없이 외부 변수를 수정하는 것은 불가능합니다. 본 포스팅에서는 global과 nonlocal 키워드의 명확한 동작 원리를 분석하고, 중첩 함수 구조에서 발생하는 데이터 무결성 문제를 해결하는 전문가급 가이드를 제공합니다.1. Global 키워드: 모듈 레벨의 전역 변수 제어global 키워드는 현재 함수 스코프 내에서 특정 변수가 모듈 전체의 전역 범위(Global Sc.. 2026. 3. 2.
[PYTHON] 익명 lambda 함수가 일반 함수 객체로 처리되는 3가지 내부 메커니즘과 차이점 해결 방법 1. 파이썬 Lambda의 본질: 이름 없는 함수 객체파이썬을 다루다 보면 한 줄짜리 짧은 로직을 위해 def 키워드로 정식 함수를 선언하는 것이 번거로울 때가 있습니다. 이때 사용하는 lambda(람다)는 흔히 '익명 함수'라고 불립니다. 하지만 "이름이 없다"는 것이 "기능이 부족하다"거나 "동작 방식이 다르다"는 것을 의미하지는 않습니다. 파이썬 인터프리터 수준에서 람다는 function 클래스의 인스턴스로 생성됩니다. 즉, 메모리 상에서는 일반 함수와 동일한 일급 객체(First-class Object)로 대우받으며, 단지 심볼 테이블에 할당된 '고유 이름'이 로 통일되어 있을 뿐입니다.2. Lambda vs Def: 런타임 처리 방식의 결정적 차이 3가지람다 함수와 일반 정의 함수(def)가 내.. 2026. 3. 2.
728x90