ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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개씩 사라진다.

    () 안에 인덱스를 넣으면 그 위치의 것이 적용된다.

    댓글

Designed by Tistory.