-
Python 문법 기초 4 - 집합 자료형(list), 얕은 복사, 깊은 복사Python 2022. 10. 22. 15:02
# 묶음형(집합형) 자료형 : list - 순서 O, 수정 O a = [1, 2, 3]; b = [10, a, 12.5, True, '문자열'] //연속으로 쓸 경우에는 ;를 사용한다. print(a, type(a), id(a)) print(b, type(b), id(b)) aa = [] bb = list() # 함수 호출로도 list 타입 가능하다. print(type(aa), type(bb)) <console> [1, 2, 3] <class 'list'> 3105589296960 [10, [1, 2, 3], 12.5, True, '문자열'] <class 'list'> 3105589284416 <class 'list'> <class 'list'>
배열 안에 배열이 들어갈 수 있다. 변수에 [] 를 주면 list 타입이 된다.
위에 처럼 메소드로 호출해도 list 타입이 된다.
family = ['엄마', '아빠', '나', '여동생'] print(family[2]) print(family[0:2]) family.append('남동생') family.insert(0, '할아버지') family.extend(['삼촌', '조카']) family += ['이모', '고모'] family.remove('남동생') del family[2] print(family, len(family)) print(family.index('나')) print('엄마' in family, '할머니' in family) del family # 변수를 삭제 # print(family) // 삭제되었기 때문에 호출 불가 err <console> 나 ['엄마', '아빠'] ['할아버지', '엄마', '나', '여동생', '삼촌', '조카', '이모', '고모'] 8 2 True False
append 로 배열 추가 가능하다.(맨 뒤에) insert 함수로 원하는 인덱스에 추가 가능하다.
extend 를 사용하면 복수를 추가할 수 있다. family += ['이모', '고모'] 이런 식으로 추가할 수 있다.
remove 로 삭제 또한 가능하다. 벨류를 적어 사용(값에 의한 삭제)
del family[2] 이러한 삭제법도 존재한다. 인덱스를 적어 사용(순서에 의한 삭제)
index 함수로 몇 번째에 있는지 확인 가능하다.
in family 로 ‘엄마’, ‘할머니’ 가 존재하는지의 여부를 알 수 있다.
print() aa = [1,2,3,['a','kbs','c'], 4, 5] print(aa) print(aa[0]) print(aa[3]) print(aa[3][1]) print(id(aa)) aa[0] = 333 # 요소값 수정 가능 print(aa, id(aa)) <console> [1, 2, 3, ['a', 'kbs', 'c'], 4, 5] 1 ['a', 'kbs', 'c'] kbs 2555252132672 [333, 2, 3, ['a', 'kbs', 'c'], 4, 5] 2555252132672
6번째 에 [3][1]은 배열 안의 배열에서 kbs 만 꺼내고 싶을 때 사용
순서별로 수정이 가능하다.
aa2 = ['123', '34', '234'] print(aa2) aa2.sort() print(aa2) aa2.sort(key=int, reverse=True) print(aa2) <console> ['123', '34', '234'] ['123', '234', '34'] ['234', '123', '34']
sort 함수는 list를 정렬(일정한 규칙에 따라 나열)해주는 함수이다.
인자를 전달하지 않고 sort()를 호출하게 되면, 기본적으로 오름차순 정렬이 이루어다.
reverse=True를 사용하면 내림차순 정렬이 된다.
key 값을 넣으면 key 값을 기준으로 정렬된다. 위는 key 값이 int이기 때문에 숫자가 높은 순으로 정렬된 것이다.
name = ['소현', '현성', '다정'] print(name) name2 = name # 얕은 복사 : 주소 치환 print(name2) print(id(name), id(name2)) import copy name3 = copy.deepcopy(name) # 깊은 복사, 새로운 객체로 생성 print(id(name), id(name2), id(name3)) name[0] = '용환' print(name) print(name2) print(name3) <console> ['소현', '현성', '다정'] ['소현', '현성', '다정'] 1825759579008 1825759579008 1825759579008 1825759579008 1825759666624 ['용환', '현성', '다정'] ['용환', '현성', '다정'] ['소현', '현성', '다정']
치환으로 똑같은 주소를 가지게 된다. 얕은 복사라고도 부른다.
copy는 id값 즉, 사물함 키를 새로 만들어서 안에 있는 값들만 복사하는 것으로 깊은 복사라고 한다.
얕은 복사는 주소값이 같아서 하나를 변경해도 다 변경되지만, 깊은 복사는 내용은 같지만 주소가 다르기때문에 적용되지 않는다.
print("stack, queue") #stack은 List in first out queue 는 First in First out sbs = [1, 2, 3] sbs.append(4) print(sbs) sbs.pop() print(sbs) sbs.pop() print(sbs) print() sbs = [1, 2, 3] sbs.append(4) print(sbs) sbs.pop(0) print(sbs) sbs.pop(0) print(sbs) <console> stack, queue [1, 2, 3, 4] [1, 2, 3] [1, 2] [1, 2, 3, 4] [2, 3, 4] [3, 4]
pop 을 사용하면 맨 뒤쪽부터 1개씩 사라진다.
() 안에 인덱스를 넣으면 그 위치의 것이 적용된다.
'Python' 카테고리의 다른 글
Python 문법 기초 6 - 묶음형 자료형(set) (0) 2022.10.22 Python 문법 기초 5 - 묶음형 자료형(tuple) (0) 2022.10.22 Python 문법 기초 3 - 집합 자료형(str) (0) 2022.10.22 Python 문법 기초 2 - 연산자, 출력 서식, 치환, format함수 (0) 2022.10.21 Python 문법 기초 1 - 변수의 type, 주소값(사물함 키), 예약어, 자료형 (0) 2022.10.21