Вопрос-Ответ

What's the difference between lists and tuples?

В чем разница между списками и кортежами?

В чем разница между кортежами / списками и каковы их преимущества / недостатки?

Переведено автоматически
Ответ 1

Помимо неизменяемости кортежей, существует также семантическое различие, которое должно определять их использование. Кортежи представляют собой разнородные структуры данных (т. Е. Их записи имеют разные значения), в то время как списки представляют собой однородные последовательности. Кортежи имеют структуру, списки - порядок.

Использование этого различия делает код более явным и понятным.

Одним из примеров могут быть пары страниц и номеров строк для ссылок на местоположения в книге, например:

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

Затем вы можете использовать это как ключ в словаре для хранения заметок о местоположениях. Список, с другой стороны, может использоваться для хранения нескольких местоположений. Естественно, можно захотеть добавлять или удалять местоположения из списка, поэтому имеет смысл, что списки изменяемы. С другой стороны, нет смысла добавлять или удалять элементы из существующего расположения - следовательно, кортежи неизменяемы.

Могут возникнуть ситуации, когда вы захотите изменить элементы в существующем кортеже местоположений, например, при переборе строк страницы. Но неизменяемость кортежей вынуждает вас создавать новый кортеж location для каждого нового значения. На первый взгляд это кажется неудобным, но использование неизменяемых данных, подобных этому, является краеугольным камнем типов значений и методов функционального программирования, которые могут иметь существенные преимущества.

По этому вопросу есть несколько интересных статей, например, "Кортежи Python - это не просто постоянные списки" или "Понимание кортежей и списков в Python". В официальной документации Python также упоминается это


"Кортежи неизменяемы и обычно содержат разнородную последовательность ...".


В статически типизированном языке, таком как Haskell, значения в кортеже обычно имеют разные типы, и длина кортежа должна быть фиксированной. В списке все значения имеют одинаковый тип, а длина не фиксирована. Таким образом, разница очень очевидна.

Наконец, в Python есть namedtuple , который имеет смысл, потому что предполагается, что кортеж уже имеет структуру. Это подчеркивает идею о том, что кортежи являются облегченной альтернативой классам и экземплярам.

Ответ 2

Разница между списком и кортежем


  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

    Это также означает, что вы не можете удалить элемент или отсортировать кортеж.
    Однако вы могли бы добавить новый элемент и в список, и в кортеж с той лишь разницей, что, поскольку кортеж неизменяем, вы не на самом деле добавляете элемент, а создаете новый кортеж, поэтому идентификатор изменится


    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

Ответ 3

Если бы вы отправились на прогулку, вы могли бы в любой момент записать свои координаты в (x,y) кортеже.

Если вы хотите записать свое путешествие, вы могли бы добавлять в список свое местоположение каждые несколько секунд.

Но вы не могли бы сделать это наоборот.

Ответ 4

Ключевое отличие заключается в том, что кортежи неизменяемы. Это означает, что вы не можете изменить значения в кортеже после его создания.

Итак, если вам нужно изменить значения, используйте список.

Преимущества кортежей:


  1. Небольшое улучшение производительности.

  2. Поскольку кортеж неизменяем, его можно использовать как ключ в словаре.

  3. Если вы не можете это изменить, то и никто другой не сможет, то есть вам не нужно беспокоиться о каких-либо функциях API и т.д., Изменяющих ваш кортеж без запроса.

python list