8.1 변경 가능, 변경 불가
변수가 참조하는 메모리 이해
Python의 모든 데이터 유형은 객체(포인터)입니다.
8.1.1 불변 데이터 유형
불변성: 변수 값을 변경할 때, 변수에 대해 이전에 초기화된 값 수정되지 않음
변수가 참조하는 메모리 주소의 값이 변경됩니다. 값은 새 위치에 저장됩니다.
*변수 > 메모리 주소 > 이진수(실제 저장된 값)
# 1 #
# 변수 5개를 선언하고, 모두 정수 65를 할당 후 메모리 주소와, 2진수를 출력하세요.
# 2 #
# 위에서 선언한 첫번째 변수에, 정수 77을 할당 후 메모리 주소와, 2진수를 출력하세요.
8.1.2 변경 가능한 데이터 유형
변하기 쉬운: 값변경하면 이전에 목록에 원래 값으로 초기화 변경
상점 주소를 목록의 요소로 나열합니다.
*목록 > 메모리 주소 > 목록 항목의 메모리 주소 > 이진수(실제 저장된 값)
# 1 #
# 리스트 2개를 선언하고, 모두 같은 정수 3개 (65, 77, 88) 을 할당 후, 메모리 주소를 출력하세요
# 2 #
# 위에서 선언한 두 리스트의, 각각의 요소의 메모리 주소를 출력하세요
# 3 #
# 3.1 첫번째 리스트에, 9를 추가하세요
# 3.2 두번째 리스트의, 첫번째 요소의 값을 정수 22로 변경하세요
# 3.3 두번째 리스트의, 두번째 요소의 값을 문자열 'A'로 변경하세요.
# 4 #
# 4.1 첫번째 리스트의, 마지막 요소의 주소값을 출력하세요.
# 4.2 두번째 리스트의, 첫번째 요소의 주소값을 출력하세요.
# 4.3 첫번째 리스트의, 두번째 요소의 주소값을 출력하세요.
# 5 #
# 2번과 5번을 비교하여 차이점을 설명하세요
8.2 얕은 복사, 깊은 복사
8.2.1 얕은 복사 = (할당 연산자)
# 1 #
# 1.1 lst_1 = (65, 77, 88) 을 lst_2 변수에, =(할당 연산자)를 사용해 복사하고, lst1과 lst2의 값을 출력하세요.
# 1.2 lst_1 에 99를 추가하고, lst1과 lst2의 값을 출력하세요.
# 2 #
# 2.1 위 lst_1 리스트 변수의 주소값과, lst_1 의 마지막 요소의 주소값을 출력하세요
# 2.2 위 lst_2 리스트 변수의 주소값과, lst_2 의 마지막 요소의 주소값을 출력하세요
# 3 #
# 3.1 lst_2 의 마지막 요소 값을 11로 변경하고, 마지막 요소의 주소값을 출력하세요
# 3.2 lst_1 의 마지막 요소의 주소값을 출력하세요
# 4 #
# 얕은 복사는 동일한 위치의 주소값을 참조하는 점을 이해했나요?
8.2.2 얕은 복사(:) , obj.copy, copy.copy( )
# *리스트 내부 요소 리스트의 주소값이 복사되어 얕은 복사가 된다.
# 1 #
# 1.1 lst_1 = (65, 77, 88) 을 lst_2 변수에, (:)(전체 슬라이싱)을 사용해 복사하고, lst1과 lst2의 값을 출력하세요.
# 1.2 lst_1 에 99를 추가하고, lst1과 lst2의 값을 출력하세요.
# 2 #
# 2.1 위 lst_1 리스트 변수의 주소값과, lst_1 의 첫번째, 두번째 요소의 주소값을 출력하세요
# 2.2 위 lst_2 리스트 변수의 주소값과, lst_2 의 첫번째, 두번째 요소의 주소값을 출력하세요
# 3 #
# =(대입 연산자), (:)(전체 슬라이싱)을 사용한 얕은 복사의 차이점을 이해했나요?
8.2.3 딥 카피 copy.deepcopy( )
# copy.deepcopy(lst)
# 유일하게 리스트 내부 리스트의 주소값이, 복사가 아닌 재할당 작업을 한다.