[python] 리스트와 튜플의 차이점은 무엇입니까?

차이점이 뭐야?

튜플 /리스트의 장단점은 무엇입니까?



답변

튜플은 불변이지만, 사용법을 안내하는 의미 론적 차이도 있습니다. 튜플은 이기종 데이터 구조 (즉, 항목의 의미가 다름)이며 목록은 동종 시퀀스입니다. 튜플은 구조를 가지며 목록은 순서를 갖습니다.

이 구별을 사용하면 코드를보다 명확하고 이해할 수 있습니다.

한 가지 예는 책에서 위치를 참조하기위한 페이지와 줄 번호의 쌍입니다. 예 :

my_location = (42, 11)  # page number, line number

그런 다음이를 사전의 키로 사용하여 위치에 메모를 저장할 수 있습니다. 반면에 목록은 여러 위치를 저장하는 데 사용될 수 있습니다. 당연히 목록에서 위치를 추가하거나 제거하고 싶을 수 있으므로 목록을 변경할 수 있습니다. 반면에 기존 위치에서 항목을 추가하거나 제거하는 것은 의미가 없으므로 튜플은 변경할 수 없습니다.

예를 들어 페이지 라인을 반복 할 때 기존 위치 튜플 내에서 항목을 변경하려는 상황이있을 수 있습니다. 그러나 튜플 불변성은 각 새 값에 대해 새 위치 튜플을 작성하도록합니다. 이것은 그 자체로는 불편한 것처럼 보이지만 이와 같은 불변의 데이터를 사용하는 것은 가치 유형과 기능적 프로그래밍 기술의 초석이며 상당한 이점을 가질 수 있습니다.

이 문제에 대한 몇 가지 흥미로운 기사가 ​​있습니다. 예를 들어 “Python 튜플은 상수 목록이 아닙니다” 또는 “Python의 튜플 vs. 목록 이해”등이 있습니다. 공식 파이썬 문서 에도 언급 되어 있습니다

“Tuples는 불변이며 일반적으로 이기종 시퀀스를 포함합니다 …”.

Haskell 과 같은 정적으로 유형이 지정된 언어 에서 튜플의 값은 일반적으로 다른 유형을 가지며 튜플의 길이는 고정되어야합니다. 목록에서 값은 모두 같은 유형이며 길이는 고정되어 있지 않습니다. 따라서 그 차이는 매우 분명합니다.

마지막으로 파이썬 에는 namedtuple 이 있는데, tuple은 이미 구조를 가지고 있기 때문에 의미가 있습니다. 이것은 튜플이 클래스와 인스턴스에 대한 경량 대안이라는 아이디어를 강조합니다.


답변

리스트와 튜플의 차이점

  1. 오자

    someTuple = (1,2)
    someList  = [1,2] 
    
  2. 크기

    a = tuple(range(1000))
    b = list(range(1000))
    
    a.__sizeof__() # 8024
    b.__sizeof__() # 9088
    

    튜플 연산의 크기가 작기 때문에 조금 더 빠르지 만 많은 요소가있을 때까지 언급하지는 않습니다.

  3. 허용 된 작업

    b    = [1,2]   
    b[0] = 3       # [3, 2]
    
    a    = (1,2)
    a[0] = 3       # Error
    

    또한 요소를 삭제하거나 튜플을 정렬 할 수 없음을 의미합니다. 그러나 튜플을 변경할 수 없기 때문에 실제로 요소를 추가하는 것이 아니라 새 튜플을 만들고 있으므로 ID가 변경 된다는 유일한 차이점으로 목록과 튜플 모두에 새 요소를 추가 할 수 있습니다

    a     = (1,2)
    b     = [1,2]  
    
    id(a)          # 140230916716520
    id(b)          # 748527696
    
    a   += (3,)    # (1, 2, 3)
    b   += [3]     # [1, 2, 3]
    
    id(a)          # 140230916878160
    id(b)          # 748527696
    
  4. 용법

    리스트는 변경 가능하기 때문에 튜플을 사용할 수있는 반면 사전에서는 키로 사용할 수 없습니다.

    a    = (1,2)
    b    = [1,2] 
    
    c = {a: 1}     # OK
    c = {b: 1}     # Error
    

답변

산책을 갔다면 (x,y)튜플 에서 언제든지 좌표를 확인할 수 있습니다 .

여행을 기록하려면 몇 초마다 위치를 목록에 추가 할 수 있습니다.

그러나 당신은 다른 방법으로 그것을 할 수 없었습니다.


답변

주요 차이점은 튜플은 변경 불가능하다는 것입니다. 즉, 튜플을 만든 후에는 값을 변경할 수 없습니다.

따라서 값을 변경해야 할 경우 List를 사용하십시오.

튜플의 이점 :

  1. 약간의 성능 향상.
  2. 튜플은 변경할 수 없으므로 사전에서 키로 사용할 수 있습니다.
  3. 변경할 수 없다면 다른 사람도 할 수 없습니다. 다시 말해 API 함수에 대해 걱정할 필요가 없습니다.

답변

리스트는 변경 가능합니다. 튜플은 없습니다.

에서 docs.python.org/2/tutorial/datastructures.html

튜플은 변경할 수 없으며 일반적으로 압축 풀기 (이 섹션의 뒷부분 참조) 또는 인덱싱 (또는 명명 된 튜플의 경우 속성 별)을 통해 액세스되는 이기종 시퀀스의 요소를 포함합니다. 목록은 변경 가능하며 해당 요소는 일반적으로 동종이며 목록을 반복하여 액세스합니다.


답변

그건 언급 차이가 크게 의미이다 : 사람들이 튜플 및 목록은 다른 정보를 나타내는 것으로 기대합니다. 그러나 이것은 지침보다 더 나아갑니다. 일부 라이브러리는 전달 된 내용에 따라 실제로 다르게 작동합니다. NumPy를 예로 들어 보겠습니다 ( 더 많은 예제를 요구하는 다른 게시물 에서 복사했습니다 ).

>>> import numpy as np
>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> idx = (1,1)
>>> a[idx]
4
>>> idx = [1,1]
>>> a[idx]
array([[3, 4, 5],
       [3, 4, 5]])

요점은 NumPy가 표준 라이브러리의 일부는 아니지만 주요 Python 라이브러리이며 NumPy 목록과 튜플 내에서 완전히 다른 것입니다.


답변

리스트는 루핑을위한 것이고 튜플은 구조를위한 것 "%s %s" %tuple입니다.

목록은 일반적으로 동종이고 튜플은 일반적으로 이종입니다.

리스트는 가변 길이, 튜플은 고정 길이입니다.