today::エンジニアに憧れる非エンジニア

今のところは、エンジニアとは言えないところの職種です。しかしエンジニア的なものの考え方に興味津津。

Pythonあれこれ 2021-01-30 - タプル

概要

「Head First Python 第2版」を進めていった中で考えたことの記録です。

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

Head First Python 第2版 ―頭とからだで覚えるPythonの基本

  • 作者:Paul Barry
  • 発売日: 2018/03/24
  • メディア: 単行本(ソフトカバー)

タプルというコレクションについて

  • 順序付きコレクションの一種
    • その性質はリストに類似する
  • 一度生成したタプルの内容は、後から変更することができない
    • このような性質を持つオブジェクトは「イミュータブルなオブジェクト」と呼ばれる
  • タプルはハッシュ化可能
    • 例えば、辞書のキーとしてタプルを用いることができる
    • 一方で、リストはハッシュ化不可
  • タプルを表すリテラル記法は()である
    • これに対し、リストを表すリテラル記法は[]である

タプルに関するコード例

vowels = list('aeiou')
vowels2 = tuple('aeiou')
print(type(vowels))
# => <class 'list'>
print(type(vowels2))
# => <class 'tuple'>

↑同じ文字列からリストとタプルを生成し、それぞれの型を出力させた例。

vowels = list('aeiou')
vowels2 = tuple('aeiou')
print(vowels)
# => ['a', 'e', 'i', 'o', 'u']
print(vowels2)
# => ('a', 'e', 'i', 'o', 'u')

↑順序付きコレクションの[]はリストであることを表す。()はタプルであることを表す。

vowels = list('aeiou')
vowels[2] = 'I'
print(vowels)
# => ['a', 'e', 'I', 'o', 'u']

vowels2 = tuple('aeiou')
vowels2[2] = 'I'
# => TypeError: 'tuple' object does not support item assignment
print(vowels2)
# => ('a', 'e', 'i', 'o', 'u')

↑リストの内容は変更できるが、タプルの内容は変更できない。

vowels2 = tuple('aeiou')
print(hash(vowels2))
# => -2063250890487547481   # ※一例

vowels = list('aeiou')
print(hash(vowels))
# => TypeError: unhashable type: 'list'

↑タプルのhashを得ることはできるが、リストのhashを得ることはできない。