goodthings4me.tistory.com
■ 파이썬에서 모든 자료(type)는 객체이기 때문에 변수에 객체를 대입하면 특정 메모리 주소를 할당받게 되고, 그 변수를 다른 변수에 대입하면 같은 객체 주소를 참조하게 된다.
■ 파이썬의 기본 자료형 중 int, float와 수정불가(immutable)한 객체인 str, tuple 등은 그 변수의 대입(할당) 값을 수정하면 다른 주소를 참조하게 되어 같은 변수라고 볼 수 없지만, 수정가능(mutable)한 객체는 값을 수정해도 참조 주소를 유지한다.
a = 10
print(id(a)) # 140729182426208
b = a
print(id(b)) # 140729182426208
print(a is b) # True
a = 20
print(id(a)) # 140729182426528 --> 참조 주소 다름
s = 'python'
print(id(s)) # 1313064861120
#s[0] = 'P' # TypeError: 'str' object does not support item assignment
s = s.replace('p', 'P')
print(s) # Python
print(id(s)) # 1313155574616 --> 참조 주소가 다름
lst_a = [1, 2, 3, 4]
lst_b = lst_a
print(id(lst_a)) # 1313157490696
print(lst_a is lst_b) # True
lst_a[0] = 10
print(lst_a, lst_b) # [10, 2, 3, 4] [10, 2, 3, 4]
print(id(lst_a)) # 1313157490696 --> 내용 수정되었지만, 참조 주소 같음
print(lst_a is lst_b) # True
■ 함수에 의한 객체(리스트) 값의 수정 여부와 수정 안되게 하는 방법
def mutable_a(l1):
l1.append(9)
print(l1)
lst = [1, 3, 5, 7]
mutable_a(lst) # [1, 3, 5, 7, 9]
print(lst) # [1, 3, 5, 7, 9] --> 원본 수정됨
def mutable_b(l1):
l2 = l1
l2.append(9)
print(l2)
lst2 = [1, 3, 5, 7]
mutable_b(lst2) # [1, 3, 5, 7, 9]
print(lst2) # [1, 3, 5, 7, 9] --> 원본 수정됨
def mutable_c(l1):
l2 = l1[:] # 리스트 슬라이싱으로 객체 대입
l2.append(9)
print(l2)
lst3 = [1, 3, 5, 7]
mutable_c(lst3) # [1, 3, 5, 7, 9]
print(lst3) # [1, 3, 5, 7] --> 원본 수정 안됨
import copy
def mutable_d(l1):
l2 = copy.copy(l1) # copy 함수 이용
l2.append(9)
print(l2)
lst4 = [1, 3, 5, 7]
mutable_d(lst4) # [1, 3, 5, 7, 9]
print(lst4) # [1, 3, 5, 7] --> 원본 수정 안됨
■ 얕은 복사 copy.copy(), 깊은 복사 copy.deepcopy() 알아보기
lst5 = ['outer', ['inner']]
cp = copy.copy(lst5)
dcp = copy.deepcopy(lst5)
print('lst5 :', lst5)
print(' cp :', cp)
print(' dcp :', dcp)
print('\n복사 결과')
print(id(lst5), id(lst5[0]), id(lst5[1]))
print(id(cp), id(cp[0]), id(cp[1]))
print(id(dcp), id(dcp[0]), id(dcp[1]))
# copy, deepcopy 모두 리스트 값을 복사하였으나(참조 주소 다름)
# copy()의 경우 outer, [inner] 모두 참조 주소가 같은 반면,
# deepccopy()의 경우 outer는 같으나 [inner]는 참조 주소가 다른 것을 볼 수 있다.
lst5.append('add_outer')
print('\n리스트에 값 추가 결과')
print('lst5 :', lst5)
print(' cp :', cp)
print(' dcp :', dcp)
# lst5에만 추가됨
lst5[1].append('add_inner')
print('\n내부 리스트에 값 추가 결과')
print('lst5 :', lst5)
print(' cp :', cp)
print(' dcp :', dcp)
# lst5, cp 두 개에 추가됨 (deepcopy는 영향 없음)
print('\n값 추가 후 참조 주소 변화 없음(mutable 객체(리스트)')
print(id(lst5), id(lst5[0]), id(lst5[1]))
print(id(cp), id(cp[0]), id(cp[1]))
print(id(dcp), id(dcp[0]), id(dcp[1]))
[실행 결과]
lst5 : ['outer', ['inner']]
cp : ['outer', ['inner']]
dcp : ['outer', ['inner']]
복사 결과
1313157491400 1313065028272 1313157639816
1313157492424 1313065028272 1313157639816
1313157636488 1313065028272 1313157525320
리스트에 값 추가 결과
lst5 : ['outer', ['inner'], 'add_outer']
cp : ['outer', ['inner']]
dcp : ['outer', ['inner']]
내부 리스트에 값 추가 결과
lst5 : ['outer', ['inner', 'add_inner'], 'add_outer']
cp : ['outer', ['inner', 'add_inner']]
dcp : ['outer', ['inner']]
값 추가 후 참조 주소 변화 없음(mutable 객체(리스트)
1313157491400 1313065028272 1313157639816
1313157492424 1313065028272 1313157639816
1313157636488 1313065028272 1313157525320
Life is Short, Use Python.
블로그 인기글
Windows 10 탐색기 느려지는 증상과 해결하는 방법
잘 작동하던 Windows 10 탐색기가 갑자기 느려지는 증상이 발생했을 때 어떻게 조치를 하는지 구글에서 찾아보니 많은 해결책들이 있었으나 어떤 것이 정확한 해결책인지는 알 수가 없었다. 그래서 해결방법이라고 제시한 것들을 정리해 보았다. 윈도우 탐색기가 느려지는 증상 해결 방법 어느 순간부터 응용프로그램(VS Code 등)에서 폴더 열기나 파일 불러오기를 했을 때 검색 팝업창이 안 뜨거나 열리는 시간이 엄청 느려지는 증상과, 더불어서 탐색기도 실행이 많이 느려지는 증상이 있었다. 기존에 사용하던 VS Code에 openpyxl 설치 후 실행이 느려지는 증상이 발생하더니 윈도우10 탐색기도 느려져서 사용할 수가 없었다. 노트북에 OS(Windows10)를 설치한지 1년이 다 되어가긴 했지만, 1개월 전..
goodthings4me.tistory.com
[국세청] 현금영수증가맹점으로 가입바랍니다. 메시지 해결방법(개인사업자)
▶ 현금영수증 가맹점 가입 메시지를 받고... 온라인 쇼핑몰 사업을 시작하려고 사업자등록증을 발급받고 난 후 얼마 안 있어서 국세청으로부터 어느 시점까지 '현금영수증 가맹점'으로 가입하라는 문자메시지가 받았었다. 그 메시지 기한이 오늘 도래했는데, 인터넷에서 찾아보니 홈택스에서 현금영수증 발급 사업자 신청을 할 수가 있었다. [관련내용] 홈>국세정책/제도>전자(세금)계산서/현금영수증/신용카드>현금영수증∙신용카드>가맹점가입 ▶ 홈택스 사이트에서 신청하는 절차는 다음과 같다. 우선, 홈택스에 로그인을 해야 합니다. 세상이 좋아져서 공인인증서 없이도 손쉽게 간편인증 로그인이 가능하다. 여러 인증방법 중 카카오톡 인증이 가장 편리한 거 같다. 간편인증 로그인 후 상단 '조회/발급' 탭 클릭 후 '현금영수증>현금..
goodthings4me.tistory.com
폐업 신고 절차와 부가가치세 신고하는 방법
폐업 신고 시 세무서 안 가고 온라인으로 신고하는 방법인 '국세청 홈택스를 이용하여 폐업 신고하는 절차와 폐업 후 해야 하는 부가가치세 신고, 인건비 저리, 종합소득세 신고 등에 대해 포스팅합니다. 폐업 신고 시 홈택스 이용하는 방법과 부가가치세 등 신고 절차 여러가지 사유로 폐업을 해야 할 때, 예전에는 세무서를 방문해야 했지만 국세청 홈택스가 생긴 이후에는 사업자 등록이나 폐업 등을 인터넷으로 할 수가 있게 되었습니다. 특히, 코로나 시국인 요즘은 더더욱 온라인 신청 업무가 더 활성화되었죠. 폐업을 한다는 것 자체가 우울한 일인데, 발품을 파는 것보다는 커피 한잔 하면서 인터넷으로 간단하게 처리하는 게 좋을 듯하여 그 절차를 올려봅니다. 폐업은 폐업 신고와 함께 폐업 후 절차까지 모두 마쳐야 불이익이..
goodthings4me.tistory.com
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] 파이썬 datetime(), time(), localtime() (0) | 2020.09.20 |
---|---|
[python] 파이썬 함수의 위치 인자, 키워드 인자 언패킹 (0) | 2020.09.19 |
[python] 파이썬의 진수 변환(2진수, 8진수, 10진수, 16진수) (0) | 2020.09.18 |
[python] 파이썬 스태틱(static) 메서드와 클래스(class) 메서드 (0) | 2020.09.17 |
[python] 파이썬 데코레이터 (Decorator) (0) | 2020.09.16 |
댓글