python 194

[Python] 깊은 복사 (deep copy)

개요 이번 글에서는 2023.12.18 - [Python] 얕은 복사 (Shallow copy)에서 정리한 얕은 복사와 반대되는 개념인 깊은 복사에 대해 정리한다. 깊은 복사 깊은 복사(deep copy)란 복사 수행 시 객체 자체를 다른 메모리 공간에 복사하는 것의 의미한다. 복사 시 참조 메모리 주소가 달라지기 때문에 변수 간의 독립성을 유지할 수 있다. 깊은 복사 수행 깊은 복사는 copy.deepcopy를 이용해 수행할 수 있다. 아래 코드는 가변 객체를 원소로 하는 list에 대해 깊은 복사를 수행하는데, 실제로 가변 객체 원소인 1번 원소의 주소값을 확인해 보면, from copy import deepcopy a = ["python2", ["python3"]] b = deepcopy(a) pr..

Python 2023.12.19

[Python] 얕은 복사 (Shallow copy)

개요 2023.12.14 - [Python] 불변 객체 (Immutable) 2023.12.15 - [Python] 가변 객체 (Mutable) 위 두 개 글에서 불변 객체와 가변 객체에 대해 정리했는데, 이 글에서는 얕은 복사에 대해 정리해보려고 한다. 얕은 복사 얕은 복사(Shallow copy)란 객체의 참조값, 주소값만 복사하는 것을 의미한다. 객체의 주소값을 복사하기 때문에 복사된 값에 변경이 발생하면 복사한 값도 영향을 받아 두 변수 간에 독립성이 성립하지 않게 되는 특징이 있다. 다만, 변수의 독립성과 관련해서는 참조한 객체가 가변 객체인 경우에만 문제가 되며, 관련해서는 사실 2023.12.15 - [Python] 가변 객체 (Mutable)에서 살펴보았다. 따라서 이 글에서는 얕은 복사를..

Python 2023.12.18

[Python] 가변 객체 (Mutable)

객체 종류 Python에서는 객체를 두 가지 종류로 구분할 수 있다. Mutable : 가변객체. 상태를 변경할 수 있는 객체 Immutable : 불변객체. 상태를 변경할 수 없는 객체 여기서 상태란 값을 의미한다. 즉, 어떤 변수에 값을 할당하고 갱신할 때 저장된 값의 데이터형의 종류에 따라 동작방식이 다르다. 2023.12.14 - [Python] 불변 객체 (Immutable)에서는 불변 객체에 대해서 정리했는데 이 글에서는 가변 객체에 대해 정리한다. 가변(Mutable) 객체 1. 변수에 할당한 값이 달라져도 변수가 참조하는 메모리 주소가 달라지지 않는다. a = ["python2", "python3"] print(f"""a={a} id(a)={id(a)}""") a.append('python..

Python 2023.12.15

[Python] 불변 객체 (Immutable)

객체 종류 Python에서는 객체를 두 가지 종류로 구분할 수 있다. Mutable : 가변객체. 상태를 변경할 수 있는 객체 Immutable : 불변객체. 상태를 변경할 수 없는 객체 여기서 상태란 값을 의미한다. 즉, 어떤 변수에 값을 할당하고 갱신할 때 저장된 값의 데이터형의 종류에 따라 동작방식이 다르다. 이해해 둘 필요가 있어 보여 이 글에서는 불변 객체에 대해 정리한다. 불변(Immutable) 객체 특징 1. 변수에 할당한 값을 변경하면 변수가 참조하는 메모리 주소가 달라진다. a = "python2" print(f'a={a}, id(a)={id(a)}') a = "python3" print(f'a={a}, id(a)={id(a)}') 위의 코드는 다음과 같은 순서로 동작한다. 문자열 객체..

Python 2023.12.14

[PySpark] org.apache.spark.SparkException: Python worker failed to connect back.

현상 PySpark가 동작하는지 확인하고자 간단히 DataFrame을 생성하는 코드를 실행했다. from pyspark.sql import SparkSession if __name__ == '__main__': # SparkSession 초기화 spark = SparkSession.builder.appName("Simple Application").getOrCreate() # 데이터프레임 생성 data = [("James", "", "Smith", "1991-04-01", "M", 3000), ("Michael", "Rose", "", "2000-05-19", "M", 4000), ("Robert", "", "Williams", "1978-09-05", "M", 4000), ("Maria", "Anne"..

Hadoop EcoSystem 2023.12.01

[Spark] Pycharm에서 실행하기

개요 2023.11.29 - [Spark] Window에 설치에서 Spark를 컴퓨터에 설치해 봤는데, 아무래도 IDE를 이용해 코딩을 하는 게 편할 것 같다. 보통 Spark는 JetBrains의 IntelliJ, Pycharm을 많이 사용한다고 하니, 이 글에서는 Pycharm으로 Spark를 실행할 수 있도록 PySpark를 설치/설정해 보겠다. PySpark 설치 - 생략 PySpark는 클러스터 자체를 설정하는 대신, 로컬에서 실행하거나 원격 클러스터에 연결하기 위한 클라이언트 용도로 사용되며, pip로 설치할 수 있다. pip install pyspark # Spark SQL pip install pyspark[sql] # pandas API on Spark pip install pyspark..

Hadoop EcoSystem 2023.11.30

[Python] dotenv - .env 파일 읽기

개요 Airflow 프로세스를 동작시킬 때 KEY=VALUE 형태로 정의된 환경 변수 파일에 적절한 값을 저장/로드하여 사용하는데, 해당 값을 Python으로도 사용하려고 한다. 확인해보니 .env 파일로부터 키-값 형식의 값을 읽어 환경 변수로 설정할 때는 python-dotenv라는 패키지를 사용하는 것 같다. 패키지 사용 방법을 정리해둔다. python-dotenv 설치 python-dotenv는 기본 내장 패키지가 아니기 때문에 별도 설치가 필요하다. pip install python-dotenv 모듈 임포트 사용 사례에 따라서 다음과 같이 import 하여 사용한다. from dotenv import load_dotenv # 환경 변수로 설정 from dotenv import dotenv_val..

Python 2023.11.23

[Python] PyMySQL - DELETE 하기

개요 2022.11.05 - [Python] PyMySQL - MySQL SELECT 하기 2023.11.17 - [Python] PyMySQL - INSERT 하기 위 두 개 글에서 Python을 이용해 MySQL에 저장된 데이터를 조회하고, 데이터를 테이블에 저장했다. 이번 글에서는 테이블에 저장한 데이터를 삭제해보려고 한다. 예시 테이블 예시로 위와 같은 users 테이블이 있다고 하자. DDL 더보기 CREATE TABLE users ( NAME VARCHAR(10), EMAIL VARCHAR(50), PRIMARY KEY (NAME) ); INSERT INTO users(NAME, EMAIL) VALUES ('daum', 'test@daum.net'), ('june', 'june@tistory...

Python 2023.11.21

[Python] PyMySQL - INSERT 하기

개요 2022.11.05 - [Python] PyMySQL - MySQL SELECT 하기에서 python으로 MySQL에 저장된 데이터를 조회해 봤는데, 이번 글에서는 INSERT를 수행해보려고 한다. cursor.execute PyMySQL로 일회성 SQL을 실행할 때는 cursor 클래스에 정의된 execute 함수를 사용한다. 예시로 다음과 같은 users 테이블이 있다고 하자. DDL 더보기 CREATE TABLE users ( NAME VARCHAR(10), EMAIL VARCHAR(50), PRIMARY KEY (NAME) ); INSERT INTO users(NAME, EMAIL) VALUES ('june', 'june@tistory.com'), ('passwd', 'passwd@tisto..

Python 2023.11.17

[Python] Counter - 중복집합 연산

개요 2023.10.10 - [Python] Counter - 데이터 수 확인에서 Counter 클래스에 대해 알아보았고, 2023.10.25 - [Python] 다중집합 교집합/합집합 구현에서 Python으로 중복집합의 교집합, 합집합 연산을 구현해 봤다. 근데 공식 문서를 보니 Counter 클래스가 다른 프로그래밍 언어의 multiset과 유사하다고 한다. 생각해 보면 중복집합 \(\{a, a, a, b, b, c, c, c, c\}\)는 \((\{a, b, c\}, (a \mapsto 3, b \mapsto 2, c \mapsto 4))\)로도 표현할 수 있는데, 이는 원소를 Key로 하고 중복도를 Value로 하는 딕셔너리로 생각할 수 있다. 그래서인지 Counter 클래스는 중복집합을 생성하기..

Python 2023.10.26