Skip to main content
Engineering LibreTexts

10.1: Tuples are Immutable

  • Page ID
    8644
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    A tuple1 is a sequence of values much like a list. The values stored in a tuple can be any type, and they are indexed by integers. The important difference is that tuples are immutable. Tuples are also comparable and hashable so we can sort lists of them and use tuples as key values in Python dictionaries.

    Syntactically, a tuple is a comma-separated list of values:

    >>> t = 'a', 'b', 'c', 'd', 'e'

    Although it is not necessary, it is common to enclose tuples in parentheses to help us quickly identify tuples when we look at Python code:

    >>> t = ('a', 'b', 'c', 'd', 'e')

    To create a tuple with a single element, you have to include the final comma:

    >>> t1 = ('a',)
    >>> type(t1)
    <type 'tuple'>

    Without the comma Python treats ('a') as an expression with a string in parentheses that evaluates to a string:

    >>> t2 = ('a')
    >>> type(t2)
    <type 'str'>

    Another way to construct a tuple is the built-in function tuple. With no argument, it creates an empty tuple:

    >>> t = tuple()
    >>> print(t)
    ()

    If the argument is a sequence (string, list, or tuple), the result of the call to tuple is a tuple with the elements of the sequence:

    >>> t = tuple('lupins')
    >>> print(t)
    ('l', 'u', 'p', 'i', 'n', 's')

    Because tuple is the name of a constructor, you should avoid using it as a variable name.

    Most list operators also work on tuples. The bracket operator indexes an element:

    >>> t = ('a', 'b', 'c', 'd', 'e')
    >>> print(t[0])
    'a'

    And the slice operator selects a range of elements.

    >>> print(t[1:3])
    ('b', 'c')

    But if you try to modify one of the elements of the tuple, you get an error:

    >>> t[0] = 'A'
    TypeError: object doesn't support item assignment

    You can't modify the elements of a tuple, but you can replace one tuple with another:

    >>> t = ('A',) + t[1:]
    >>> print(t)
    ('A', 'b', 'c', 'd', 'e')

    This page titled 10.1: Tuples are Immutable is shared under a CC BY-NC-SA license and was authored, remixed, and/or curated by Chuck Severance.

    • Was this article helpful?