관리 메뉴

bright jazz music

복합자료형(compound data type):리스트 본문

Language/python

복합자료형(compound data type):리스트

bright jazz music 2022. 4. 30. 09:10

복합자료형이란?

 

여러 데이터를 한 덩어리로 모아서 유지

- 하나의 이름으로 다수의 데이터에 접근 가능

- 연관된 데이터들을 일관된 방법으로 저장하고 접근

 

복합자료형을 사용하는 이유

 

--> 좀 더 간단하고 명료하게, 일관적인 방법으로 접근 가능

--> 반복문과 결합하여 반복적인 처리 용이

 

 

복합자료형의 종류

 

- 리스트

- 튜플

- 딕셔너리

- 집합

 

1. 리스트

연관된 정보들의 목록

여러 데이터를 하나로 묶어 순번에 따라 처리함

-연관된 다수의 데이터를 하나의 이름으로 접근

-저장 순서를 유지

-순번에 따라 각 데이터에 접근

-반복문과 함께 사용하여 효율적으로 데이터에 접근

 

요소(element) : 리스트에 포함된 개별 데이터

- 요소가 하나도 없는 리스트도 존재한다.

 

 

변수선언은 반복문 연산식으로 불가능했기 때문에 리스트와 같은 복합자료형이 나타나게 되었다.

 

변수와 마찬가지로 리스트를 사용하기 위해서ㅡㄴ 먼저 초기값 할당을 통해 선언해야 함

 

리스트_이름 = [값1, 값2, ... , 값n] #n개의 요소를 갖는 리스트 선언문

 

list1 = [11, 22, 33, 44, 55]

list2 = ['단어1', '단어2']

list3 = []

list4= [11, '홍길동', 19, 180.5, [1,2,3] ]
#여러 타입의 데이터가 묶일 수 있다. 그러나 반복문을 사용하는 데 제약 존재
#이런 경우 딕셔너리 사용이 나을 수 있다

 

리스트의 내부 구조

 

복합자료형은 가변객체이다.

- 여러 칸을 가지고 있는 그릇이다. 그 칸의 개수가 가변적일 수 있다.

- 리스트 변수에 저장된 데이터 객체에 대한 아이디 변경 가능

- 리스트 변수가 가리키는 리스트 데이터 객체 자신도 수정 가능 

 

: 일반자료형의 경우 아이디만 바뀌는 데 비해서, 복합자료형은 그 객체의 요소가 바뀔 수 있으므로, 그러니까 요소의 값이 바뀌거나 갯수가 바뀔 수 있으므로, 가변적이라고 하는 것이다.

https://pythontutor.com/ 코드를 가시화해줌.

코드를 작성하고

render all objects on the heap를 선택하면

 

아래와 같이 시각화 해줌

 

 

 

리스트 요소의 선택: 인덱싱

유효한 순번(인덱스)에 따라 각 요소 데이터를 개별적으로 선택해 접근하는 연산

 

list[0] 가장 앞 첫 요소, list[-1] 가장 마지막 요소

 

리스트 슬라이싱: 범위를 이용해 리스트를 구성하는 부분 요소들에 대한 리스트를 결과로 얻는 연산

 

리스트이름[시자인덱스:끝인덱스] 

#시작인덱스 ~ (끝 인덱스 -1) 사이의

#부분 리스트를 결과값으로 가짐

 

시작인덱스 생략 시 0번부터 슬라이싱

끝인덱스 표현은 생략 시 마지막까지 슬라이싱

 

list1 = [11, 22, 33, 44, 55]

sub_list = list1[1:3]

print(sub_list) #[22, 33]c 출력

print(sub_list[0]) #22가 출력

 

 

 

msg = 'hello'
msg[-1]
#'o'

nums = [11, 22, 33, 44, 55]
nums[-1]
#55

msg[0]=1
#Traceback (most recent call last):
#  File "<pyshell#32>", line 1, in <module>
#    msg[0]=1
#TypeError: 'str' object does not support item assignment

nums[0] = -11
nums
#[-11, 22, 33, 44, 55]


nums[0:]
#[-11, 22, 33, 44, 55]
nums[:-1]
#[-11, 22, 33, 44]
nums[:]
#[-11, 22, 33, 44, 55]
nums[1:3] = [100, 200, 300]
nums
#[-11, 100, 200, 300, 44, 55]



nums = [11, 22, 33, 44, 55]
nums[1] = [100, 200, 300]
print(nums)
#[11, [100, 200, 300], 33, 44, 55]

 

nums1 = [11, 22, 33]

print(nums1[1:1])하면 []를 반환한다. 공백요소가 전혀 없는데도 오류가 나지 않는 이유는?

 

1번부터 1번 전까지라는 표현이기에, 해당하는 요소를 하나도 발견할 수 없어 공백리스트가 반환된 것이다.

대상이 되는 요소가 없다는 의미로 해석할 수 있다.

 

 

 

얕은 복사(shallow copy)

- 대입 연산은 두 변수가 같은 객체에 대한 아이디를 갖게 함

- 즉, 엄밀히 말해 리스트가 복사되었다고 볼 수 없다. 두 변수가 하나의 같은 객체를 바라보고 있는 것일 뿐이다.

#얕은 복사

n1 = 10
n2 = n1
n2
#10
n1 = 0
n1
#0
n2
#10

따라서 바라보는 곳이 바뀔 뿐이므로 값이 바뀌지는 않는다.

 

 

 

이를 얕은 복사(shallow copy)라고 한다. 이는 서로 같은 아이디를 가지게 하는 것이다. 따라서 nums1의 값이 바뀌면 nums2의 값도 바뀐다.

 

 

만약 기존의 리스트와 똑같은 요소를 갖는, 별도의 복사본 리스트를 생성하려면,

 

 

깊은 복사(deep copy)를 해야 한다

단순 할당 대신 리스트 슬라이싱을 사용해야 한다.

같은 요소를 가진 두 개의 별도의 리스트가 생성되었다.

 

리스트의 비교연산

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Language > python' 카테고리의 다른 글

GUI 예제  (0) 2022.05.24
파이썬 클래스 생성자 과제  (0) 2022.05.15
반복문 과제  (0) 2022.04.23
반복문(while, for)  (0) 2022.04.23
220409 조건문, 반복문  (0) 2022.04.09
Comments