[Python 기초] TIL - 2 -

SImple As SIA·2023년 4월 26일

python

목록 보기
2/2
post-thumbnail

0. 복습문제

  1. 응답하라 1998
    휴대폰 번호 앞자리에 따라 통신사가 아래와 같이 구분되던 시절이 있었습니다. 사용자로부터 input 함수를 통해 휴대전화 번호를 입력 받고, 통신사를 출력하는 프로그램을 작성해보세요. 입력받을 때 '-'기호는 넣거나 말거나 영향을 미치지 않습니다.
    힌트 :
    휴대전화번호 앞 3개 확인은 str도 배열(튜플)의 속성을 가지고 있다는 것을 활용합니다.
번호    통신사
011    SKT
016    KT
019    LGU
010    알수없음
In  
number = input("phonenumber : ")
n = number[:3] 
n #str으로 들어올것

Out
phonenumber : 011-1111-1111
011

In(My Ans) #조건문 사용
if '011' in n:
      print ("SKT")
elif '016' in n:
      print ("KT")
elif '019' in n:
      print ("LGU")
else:
      print("알수없음")
      
Out
SKT

In(Rec Ans)
#조건문 아닌 다른 방법 (딕셔너리를 이용하는 것이 훨씬 간단한 방법)#####
num = input ('내용을 입력하세요: ')

nums = {'011': 'SKT',
       '016': 'KT',
       '019': 'LGU',
       '010': '알수없음'}
nums.get(num[0:3])

Out
SKT

Comments ) 딕셔너리 활용 아이디어를 더 염두해둬야 할 거 같다.

1. 복사 (Shallow Copy vs Deep copy)

python 배우기 시작하면서 가장 흥미로웠던 부분.. 메모리에 대한 이해가 필요해보였다.

shallow copy: 주소 복사, 원본은 여전히 한 개, id가 같음(같은 저장소)
deep copy: 값 복사, 원본이 두 개, id주소가 각각 다름(다른 저장소)

1.1. Shallow Copy

[Example 1]

arr2D = ['Hello', 'Bye', 'Hi', ['Goodnight', 'Goodmorning', 'Goodafternoon']]
arr2Dcopy = arr2D
id(arr2Dcopy), id(arr2D)
arr2Dcopy2 = arr2Dcopy[2:5]
id(arr2Dcopy2), id(arr2Dcopy), id(arr2D)
arr2Dcopy2[0] = 'night'
arr2Dcopy2, arr2Dcopy, arr2D

얕은 복사를 실행할 시 화살표가 한 곳으로 향하는 것을 알 수 있다. 즉 같은 주소를 복사한 것이므로 호출 시 같은 곳에서 불러 온다는 것이다.

  • arr2Dcopy = arr2D 기본적으로 얕은 복사가 이루어짐. 시퀀스 타입은 얕은 복사가 기본
  • 하지만 데이터를 다루는 일은 원본이 중요하기에 깊은 복사를 기본적으로 하게 됨. 따라서, 데이터 관련 패키지, 모듈들은 기본적으로 딥카피를 차용하고 있다
  • deepcopy하는 함수를 import해서 호출해야 함

1.2. Deep Copy

2 가지의 실행 방법
[1]

import copy #copy.py파일이 실행된다. (메모리에 올라간다)

arr2Ddeep = copy.deepcopy(arr2D)

[2]

from copy import deepcopy

arr2Ddeep = deepcopy(arr2D)  # copy 안 붙여도 됨 

깊은 복사를 하는 경우 같은 내용의 원본이 다른 곳에 또 생성되는 것을 확인할 수 있다. 주소값도 다르다.

profile
韜光養晦

0개의 댓글