Notice
Recent Posts
Recent Comments
Link
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Archives
Today
Total
관리 메뉴

뒤죽박죽 데이터분석 일기장

[Python] [1일차] 얕은복사, 깊은복사, 문자열 데이터 활용 본문

Python

[Python] [1일차] 얕은복사, 깊은복사, 문자열 데이터 활용

시우마이 2023. 1. 2. 17:01

이번 포스트는 강사님이 강의 끝부분에 설명하신 자주 실수 하는 파이썬 코딩에 대해서 애기해 보려고 합니다. 

 

얕은 복사와 깊은 복사


data1 = [1, 2, 3]
data2 = data1 
print(data1, data2)
data1[1] = 4
print(data1, data2)

 

이런 코드를 봤을 때 어떤 결과값이 나올 거 같나요? 저는 data1 과 data2가 서로 다른 값이 출력될 것이라고 생각했습니다. 

 

하지만 출력했을 때 값은 

 

 

이렇게 나옵니다. 왜 같게 출력될까요?

 

그 이유는 우리가 얕은 복사를 해서 그렇습니다. 

 

평소에 파이썬에서 변수와 변수를 지정할 때 위와 같이 하게 된다면 그것은 그저 변수의 주소값을 복사하는 것과 다름이 없습니다. 

 

그래서 이런 경우에는 copy()라는 함수를 사용해야하는데

data1 = [1, 2, 3]
data2 = data1 #얕은복사 : 주소값 복사 
data3 = data1.copy() #깊은복사 : 데이터 복사 
print(data1, data2)
data1[1] = 4
print(data1, data2, data3)

이렇게 copy 함수를 이용해 새로 변수를 지정하게 되면 모든 값들이 완벽히 복사되어서 data3에 지정됩니다. 

 

이런걸 깊은 복사라고 부릅니다. 만약 어떤 값을 복사하고 수정해야된다면, 주소값만 복사하는 얕은 복사가 아닌 전체 모든 값을 복사하는

 

깊은 복사를 사용해야 합니다. 

 

주소갑을 확인하기 위해서는 id() 함수를 사용하면 확인할 수 있습니다. 

 

 

#주소값 확인 함수 
data1 = [1, 2, 3]
data2 = data1 #얕은복사 : 주소값 복사 
data3 = data1.copy() #깊은복사 : 데이터 복사 
data1[1] = 4
#id(): 식별자의 주소값 출력 
id(data1), id(data2), id(data3)

 

 

주소값을 확인하면 data1 과 data2의 주소값이 같은걸 확인할 수 있습니다. 

 

문자열 데이터 활용


이번에는 문자열 데이터의 활용 몇 가지를 살펴 보겠습니다. 

 

흔히 문자열을 지정할 때는 큰 따옴표("") 또는 작은 따옴표('') 의 기호를 이용해서 지정합니다. 

 

하지만 만약 문자열 안에 " 이나 '가 포함되어 있다면 어떻게 해야할까요? 

 

d1, d2 = "python1", 'python2'
d3, d4 = "jupyter's notebook", 'jupyter "note" book'
d5 = 'jupyter\'s "note" book' # \ : 이스케이핑 문자
print(d3, d4, d5)

 

 

만약 문자열 안에 작은 따옴표('')가 있다면 큰 따옴표("")를 사용하면 될 것이고 큰 따옴표("")가 있다면 작은 따옴표('')를 사용하면 됩니다. 

 

하지만 둘 다 있다면? 바로 d5 변수처럼 백슬래쉬를 이용해서 둘 다 문자열에 넣을 수 있습니다. 

 

 

 

멀티라인 문자열


만약 다수의 줄을 출력하고 싶다면 아래와 같이 입력하면 됩니다. 

 

d6 = '''
jupyter
notebook
'''
print(d6)

 

 

 

변수의 데이터를 문자열에 삽입 


#1번째 방법
data1, data2 = '1000', '2000'
string = '저는 ' + data1 + '원을 가지고 있습니다.'
string
string1 =  '저는 ' + data1 + '원을 가지고 ' + data2 + '원을 더할 것 이다.'
string1

 

 

#format 함수를 이용하는 2번째 방법

data1, data2 = 1000, 2000
string = '저는 {}원중에 {}원을 사용하였습니다.'.format(data1, data2)
string

 

#format 함수를 이용한 가장 간략화된 버젼

data1, data2 = 1000, 2000
string = f'저는 {data1}원중에 {data2}원을 사용하였습니다.' #f는 format의 약자 
string

 

 

위와 같이 총 3가지 방법으로 문자열 안에 변수를 넣어 출력할 수 있습니다. 

 

보통 3번째 방법이 간략화되어 많이 사용된다고 합니다. 

 

또한 format 함수를 이용하면 1번째 처럼 숫자를 굳이 문자형으로 바꾸지 않아도 대입할 수 있습니다.