JAMONGPROJECT

[DAY3] Python의 자료형, 자료형의 복사 본문

Challenge/FASTCAMPUS 30일 챌린지

[DAY3] Python의 자료형, 자료형의 복사

JAMONGPROJECT 2023. 2. 22. 07:58


4 매핑형

 

딕셔너리란?

 

Key : value의 형태로 주어진 데이터들의 집합을 딕셔너리라고 한다.

 

{key1:value1, key2:value2, key3:value3, …}

Key에는 변하지 않는 값을 사용하고 value에 있는 값은 변경 가능하다.

 

key의 순서는 없으며 key는 중복될 수 없다.

Key의 자료형에는 제한이 없지만 일반적으로 문자열을 쓴다.

Key에 대응되는 value를 가져오고 싶으면 dictionary[key]를 입력.

 

 

Dictionary 만들기

 

dict1 = {} 또는 dict1 = dict()
dict1[5] = 3
dict1[3] = 2

=> dict= {5:3, 3:2}

 

주요 함수들

 

길이 반환: len(딕셔너리)
데이터 삭제 : del 딕셔너리[key]
키 값 모두 반환 : 딕셔너리.keys()
밸류 값 모두 반환 : 딕셔너리.values()
기타: clear, copy, get(key), update, popitem 등

List와 같이 값이 변할 수 있는 것은 키가 될 수 없다

 

 

자료형의 복사

 

불변성(immutable)

 

얕은 복사 (Shallow Copy)와 깊은 복사 (Deep Copy)를 이해하려면

가변성, 불변성(mutable, immutable)부터 이해해야한다.

 

변수에 원시값이 할당된다면 (ex : string, number, boolean ...)

a = 100

a는 100이라는 값의 메모리 위치를 참조한다.

이후에 a의 값이 변경된다면,

a = 4

a가 가리키는 위치는

100의 메모리 위치에서 4의 메모리위치로 변경된다.

 

이러한 경우를 '재할당'이라고 부르며

재할당은 변수가 값을 담을 공간

즉, 메모리 위치의 변경이 일어난다.

 

왜냐하면, 100이라는 값은 number로 불변성(immutable)을 가지고 있기 때문에

변수 a의 값을 변경할 수 없으므로

100이라는 값의 메모리 위치에서

4라는 값의 메모리 위치로 이동을 하는 것이다.

 

 

얕은 복사(Shallow Copy)

 

만약 변수 a가

a = [1,2,3]

이라는 list의 형태를 가지게 된다면

list, set, dictionary와 같은 값의 형태는 가변성(mutable)을 지니고 있기 때문에

a = [1, 2, 3]
print(id(a))
>>> 4393788808

a[0] = 5
print(a)
>>> [5, 2, 3]
print(id(a))
>>> 4393788808

위와 같이 내부값을 변경하더라도 id값이 변하지 않는다.

 

그러나 이중 리스트와 같은 형태에서는 문제가 발생하는데

a = [[1,2], [3,4]]
b = a[:]
print(id(a))
>>> 4395624328
print(id(b))
>>> 4396179592
print(id(a[0]))
>>> 4396116040
print(id(b[0]))
>>> 4396116040

b를 슬라이스를 이용해 a를 복제한다면

a, b 각각의 id값은 다르지만

리스트 안의 리스트의 값은 같은 id를 참조하고 있음을 알 수 있다.

 

깊은 복사(Deep Copy)

 

copy 모듈을 이용해서 copy.deepcopy() 메소드를 사용해 깊은 복사를 하면

import copy
a = [1,2,3,4]
b = copy.deepcopy(a)

a와 b는 완전히 다른 메모리 위치를 가리키는 list가 된다.

 


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

http://bit.ly/3Y34pE0

 

#패스트캠퍼스 #패캠챌린지 #수강료0원챌린지 #환급챌린지 #직장인인강 #직장인자기계발
#패캠인강후기 #패스트캠퍼스후기 #오공완

#한번에끝내는컴퓨터공학전공필수&인공지능심화초격차패키지Online

'Challenge > FASTCAMPUS 30일 챌린지' 카테고리의 다른 글

[DAY6] 함수 및 변수  (1) 2023.02.25
[DAY5] 실전문제 풀이  (0) 2023.02.24
[DAY4] 제어문  (0) 2023.02.23
[DAY2] Python의 자료형  (0) 2023.02.21
[DAY1] Python 개요, Python의 자료형  (0) 2023.02.20
Comments