Pythonの オブジェクトとリスト、これから始めようとする初心者向けに分かりやすく解説|Python入門(10)

Python
この記事は約24分で読めます。

ーーーーーーーーーーーーーーーーーーーーー2026年3月9日執筆ーーーーーーーーーーーーーーーーー

Pythonの オブジェクトとリスト、これから始めようとする初心者向けに分かりやすく解説|Python入門(10)のPodcast

下記のPodcastは、Geminiで作成しました。

はじめに

Pythonというプログラミング言語を学び始めると、避けては通れない、そして最も強力な武器となる概念が「オブジェクト」と「リスト」です。これらは単なる文法の一部ではなく、Pythonという言語の設計思想そのものを形作っています。特に、2024年末にリリースされた最新のPython 3.13では、これらの基本的な仕組みをより直感的に、そして効率的に扱うための多くの改善が加えられました [1]。本報告では、これからプログラミングを始める皆さんが、Pythonの心臓部であるオブジェクトの正体を理解し、リストという便利な道具を自在に操れるようになるまで、丁寧に詳しく解説していきます。

Pythonにおける「オブジェクト」の正体

プログラミングの世界で「オブジェクト(Object)」という言葉を聞くと、何か難解なものを想像されるかもしれません。しかし、Pythonにおけるオブジェクトの考え方は、驚くほどシンプルで現実世界に近いものです。Pythonの世界では、数値、文字列、リスト、関数、さらにはプログラムそのものまで、あらゆるものが「オブジェクト」として存在しています [2]

全てがオブジェクトであるということ

Pythonの最大の特徴は「全てがオブジェクトである」という設計思想にあります [3]。これは、あらゆるデータが単なる値としてだけでなく、そのデータが「何であるか」という情報と、そのデータを使って「何ができるか」という機能がセットになった「モノ」として扱われることを意味します [4]。例えば、単なる「10」という数字も、Python内部では整数(int)という型を持ち、他の数値と計算したり、自身の情報を出力したりするためのメソッドを備えた立派なオブジェクトです [5]。この設計のおかげで、私たちは複雑なプログラムを「モノとモノとのやり取り」として組み立てることができます。これは現実世界で、車という「モノ」がエンジンをかける、加速する、といった機能を持ち、運転手がそれを操作するのと非常に近く似ています [6]

オブジェクトを形作る3つの要素

Pythonのオブジェクトを深く理解するために欠かせないのが、以下の3つの要素です [7]。これらはオブジェクトが生成された瞬間に割り当てられ、そのオブジェクトのアイデンティティを決定します。

要素意味役割確認方法
同一性 (Identity)オブジェクト固有の識別番号メモリ上の「住所」のようなものid() 関数
型 (Type)オブジェクトの種類そのオブジェクトが「何」であり、「何ができるか」を定義するtype() 関数
値 (Value)オブジェクトが保持する具体的な中身実際に処理されるデータそのものprint() など

特に「同一性(id)」は重要です。Python内部では、全てのオブジェクトに重複しない番号が割り当てられており、これによってコンピュータはどのオブジェクトを操作しているのかを正確に識別しています [8]。CPythonという標準的なPython実装では、このidはメモリ上のアドレスそのものを示しています [9]

変数は「名札」である

初心者が最も陥りやすい誤解の一つに、「変数は値を入れる箱である」というものがあります。他の多くの言語ではその通りなのですが、Pythonにおいては「変数はオブジェクトに貼り付けられた名札(ラベル)」と考えるのが正解です [10]

python

# 変数(名札)をオブジェクトに貼り付ける
a = [1, 2, 3]
b = a

このコードを実行したとき、Pythonの中では「[1, 2, 3]というリストオブジェクト」が一つだけ作られ、そこに「a」と「b」という2つの名札が貼られた状態になります [11]。名札を剥がして別のオブジェクトに貼り替えることは自由ですが、名札自体がデータを持っているわけではありません。この仕組みを理解することは、後述するリストの操作やメモリ効率を考える上で非常に大きな助けとなります [12]

リストオブジェクトの基本と特徴

Pythonで最も汎用性が高く、頻繁に使われるオブジェクトの一つが「リスト(List)」です。リストは、複数のオブジェクトを順番に並べて、ひとまとめにして管理するためのデータ構造です [13]

リストの作成と柔軟な構造

リストを作成するには、角括弧 `[]` を使い、その中に要素をカンマ区切りで並べます [14]。Pythonのリストが非常に強力なのは、その中に入れるオブジェクトの種類(型)を問わない点にあります [15]

数値のリスト: `[1, 2, 3]`

文字列のリスト: ["Python", "Java", "C++"]

混合リスト: `[1, "Hello", 3.14]`

空のリスト: `[]`

さらに、リストの中に別のリストを入れる「入れ子(ネスト)」構造も可能です。これにより、行列のような多次元のデータを表現することも容易になります [16]。最新のPython 3.13では、こうしたリストや辞書といった標準的なデータ構造のメモリ効率が改善されており、従来よりも少ないメモリでより多くのデータを扱えるようになっています [17]

インデックスによるアクセス

リストに並べられた各要素には、先頭から「0, 1, 2...」と順番に番号が振られています。これを「インデックス(索引)」と呼びます [18]

リストの内容"P""y""t""h""o""n"
正のインデックス012345
負のインデックス-6-5-4-3-2-1

Pythonのリストでは、末尾から数える「負のインデックス」も利用できます。例えば -1 は常に最後の要素を指します [19]。これにより、リストの長さが分からなくても、最後のデータに即座にアクセスできるという利点があります。

可変性(ミュータブル)という重要な概念

オブジェクトを扱う上で、初心者が必ずマスターしなければならないのが「ミュータブル(Mutable:変更可能)」と「イミュータブル(Immutable:変更不能)」という区別です [20]

●リストは変更可能なオブジェクト

リストは「ミュータブル」なオブジェクトです。つまり、一度リストを作成した後でも、その中身を自由に追加、削除、書き換えることができます [21]。これに対し、数値や文字列、タプルなどは「イミュータブル」であり、一度作られたオブジェクト自体の値を変更することはできません(変更したように見えても、実際には新しいオブジェクトに名札を貼り替えています) [22]。この違いは、プログラムの挙動に大きな影響を与えます。例えば、2つの変数に同じ一つのリストが紐付いている場合、一方の変数を通じてリストを書き換えると、もう一方の変数から見た内容も同時に変わってしまいます [23]。これは、名札は2つあっても、操作している「実体(オブジェクト)」が一つだからです [24]

リストのスライス操作

リストの特定の範囲を一度に取り出す手法を「スライス(Slice)」と呼びます [25]。スライスは `リスト[開始:終了:ステップ]` という形式で記述します [26]

開始位置: 取り出しを始めるインデックス(その番号を含む)。省略すると先頭からになります [27]

終了位置: 取り出しを終えるインデックス(その番号は含まない、その手前まで)。省略すると最後までになります [28]

ステップ: 要素をいくつずつ飛ばして取り出すか。省略すると1ずつになります [29]

スライス操作の素晴らしい点は、元のリストを変更せずに、指定した範囲の「新しいリスト」を生成して返すという点です [30]。また、`list[:]` のように全てを省略して記述すると、リスト全体のコピーを簡単に作成でき、これは「実体は別だが中身が同じ」オブジェクトを作りたいときに非常に便利です [31]

リストを操作する主要なメソッド一覧

リストオブジェクトには、そのデータを操作するための便利な「メソッド」が多数用意されています。メソッドとは、オブジェクトに備わっている「専用の関数」のことです [32]

要素の追加と結合

リストに新しいデータを追加する方法はいくつかあります [33]

`append(x)`: リストの末尾に要素 x を一つ追加します [34]

`extend(iterable)`: リストの末尾に、別のリストやタプルなどの全要素を結合します [35]

`insert(i, x)`: 指定した位置 i に要素 x を割り込ませます [36]

要素の削除

不要になった要素を取り除くメソッドも充実しています [37]

`remove(x)`: リストの中で最初に見つかった値 x を削除します。値が存在しないとエラーになります [38]

`pop([i])`: 指定した位置 i の要素を削除し、その値を「戻り値」として返します。引数を省略すると最後の要素を削除します [39]

`clear()`: リストの中身を全て空にします [40]

検索と並べ替え

リスト内のデータを整理したり探したりするためのメソッドです [41]

`sort(reverse=False)`: 要素を昇順(reverse=True で降順)に並べ替えます。これは元のリストを直接書き換える「破壊的」な操作です [42]

`index(x)`: 値 x がリストの何番目にあるかを返します [43]

`count(x)`: 値 x がリスト内にいくつあるか数えます [44]

最新のPython 3.13では、これらのメソッドの内部処理も最適化されており、特に大規模なリストにおける検索や並べ替えのパフォーマンスが向上しています [45]

最新のPython 3.13における進化とメリット

プログラミング初心者にとって、最新のPython 3.13を使用する最大のメリットは、単なる「速さ」だけでなく、「学びやすさ」と「親切さ」が劇的に向上している点にあります [46]

劇的に改善されたエラーメッセージ

プログラミングを始めたばかりの頃、最もストレスを感じるのはエラー(バグ)の発生でしょう。Python 3.11から3.13にかけて、エラーメッセージは「人間に寄り添った」ものへと進化しました [47]。例えば、リストの要素を指定する際に打ち間違いをした場合や、インポートしていないモジュールを使おうとした場合、最新のPythonは単に「エラーです」と言うだけでなく、「もしかして、〇〇と言いたかったのではないですか?」と、解決策を具体的に提案してくれます [48]。Python 3.13では、関数に渡すキーワード引数のタイポに対しても、正しい名前を推測して教えてくれる機能が追加されました [49]。また、エラーが発生した箇所の表示(トレースバック)がカラーで表示されるようになり、どこで何が起きたのかが視覚的に一瞬で把握できるようになっています [50]。これにより、初心者がデバッグにかける時間を大幅に短縮し、学習のモチベーションを維持しやすくなっています [51]

新しくなった対話型インタープリタ(REPL)

Pythonには、ターミナル上で一行ずつコードを書いて即座に実行結果を確認できる「対話型インタープリタ(REPL)」という機能があります [52]。Python 3.13では、このREPLが全面的に刷新されました [53]

複数行の履歴保存: 以前に書いた複数行にわたる複雑なコードを、履歴から呼び出して再編集できるようになりました [54]

ペーストモード (F3): インターネット上のサンプルコードなどをコピーして貼り付ける際、インデントが崩れてエラーになるのを防ぐための専用モードが搭載されました [55]

カラー表示: プロンプトやコードが色分けされ、非常に読みやすくなっています [56]

終了コマンドの簡略化: これまでは `exit()` と関数として呼び出す必要がありましたが、最新版では `exit` と打つだけで終了できるようになりました [57]

メモリ効率と実行速度の向上

Python 3.11で導入された「Adaptive Interpreter」という仕組みにより、繰り返し実行されるコードは自動的に最適化され、大幅に高速化されます [58]。さらに、Python 3.13ではリストや辞書といったオブジェクトが使用するメモリ量が従来比で約20%削減されています [59]。これは、大量のデータを扱うデータサイエンスやWebアプリケーション開発において、より少ないリソースで効率的なプログラムが動かせることを意味します [60]

実践的なリストの活用とベストプラクティス

知識を定着させるために、リストをどのように実務で使いこなすべきか、そのポイントを整理します。

リスト内包表記の活用

Pythonには、リストの生成を一行で簡潔に記述できる「リスト内包表記」という強力な構文があります [61]

python

# 0から4までの二乗のリストを作る
# 通常の書き方
squares = []
for x in range(5):
    squares.append(x**2)

# リスト内包表記
squares = [x**2 for x in range(5)]

この書き方は単に短いだけでなく、Python内部で最適化されて実行されるため、従来の `append` を繰り返す方法よりも高速です [62]。Python 3.12以降、この内包表記の処理はさらにインライン化が進み、さらなる高速化が実現しています [63]

リストとタプルの使い分け

リストと似たデータ構造に「タプル(Tuple)」があります。リストとの最大の違いは、タプルが「イミュータブル(変更不能)」であるという点です [64]

特徴リスト (list)タプル (tuple)
定義[a, b, c](a, b, c)
可変性ミュータブル(変更可能)イミュータブル(変更不可)
主な用途データの追加・削除が必要な場合データの整合性を保ちたい場合、辞書のキー
パフォーマンス柔軟だがメモリ消費はやや多い高速でメモリ効率が良い

「一度決めたら変えたくないデータ」はタプルに、「状況に応じて中身が変わるデータ」はリストに、という使い分けを意識することで、より安全で意図の明確なプログラムを書くことができます [65]

結論:Pythonの世界を広げるために

Pythonの「オブジェクト」と「リスト」を理解することは、単なる文法の習得を超えて、コンピュータがどのようにデータを扱い、処理しているのかという深い洞察を得ることにつながります [66]。最新のPython 3.13は、これらの一見難解に思える概念を、より親切に、そして効率的に学べるよう設計されています [67]。リストを自在に操れるようになれば、大量のデータを一括で処理したり、複雑なシミュレーションを行ったりすることが可能になります [68]。そして、その背後にある「オブジェクト」という仕組みを知ることで、Pythonという言語の本当の力、すなわち「シンプルで、再利用しやすく、そして何よりも書いていて楽しい」という魅力を存分に味わうことができるでしょう [69]。まずは、自分の手でリストを作成し、様々なメソッドを試し、そしてエラーが出たときはその「親切な提案」に耳を傾けてみてください。その一歩一歩が、あなたを素晴らしいPythonプログラミングの世界へと導いてくれるはずです [70]

参考資料

1. What’s New In Python 3.13, https://docs.python.org/3/whatsnew/3.13.html

2. Python Documentation Contents, https://docs.python.org/3/contents.html

3. Built-in Functions — Python 3.13.2 documentation, https://docs.python.org/3/library/functions.html

4. The Python Standard Library, https://docs.python.org/3/library/index.html

5. Python 3.13.2 documentation, https://docs.python.org/3/

6. Python Classes and Objects: A Beginner's Guide, https://www.dataquest.io/blog/using-classes-in-python/

7. How to Learn Python: 6 Steps for Success, https://www.datacamp.com/blog/how-to-learn-python-expert-guide

8. Object-Oriented Programming (OOP) in Python 3, https://realpython.com/python3-object-oriented-programming/

9. If you were to start learning Python in 2025..., https://www.reddit.com/r/learnpython/comments/1hv7yd2/if_you_were_to_start_learning_python_in_2025/

10. Classes and Objects in Python Explained with Examples for Beginners, https://ririblogs.medium.com/classes-and-objects-in-python-explained-with-examples-for-beginners-917a0abeba61

11. Python Fundamentals: Lists and Mutability, http://www.compciv.org/guides/python/fundamentals/lists-mutability/

12. Python List: A Tutorial on Python List and List Manipulation, https://builtin.com/data-science/python-list

13. Data Structures — Python 3.13.2 documentation, https://docs.python.org/3/tutorial/datastructures.html

14. Python List Slice Assignment, https://www.youtube.com/watch?v=debguj59RZ8

15. The Python Tutorial, https://docs.python.org/3/tutorial/index.html

16. Popular Python Tutorials and Courses from 2024, https://realpython.com/popular-python-tutorials-2024/

17. Python List: Comprehensive Guide, https://www.mygreatlearning.com/blog/python-list-all-you-need-to-know-about-python-list/

18. Mastering Python Lists, https://blog.devgenius.io/mastering-python-lists-b0873b7c9e78

19. Python Method – Classes, Objects and Functions in Python, https://data-flair.training/blogs/python-method/

20. Python 3.12 Preview: Ever Better Error Messages, https://realpython.com/python312-error-messages/

21. Python 3.11: What are the best new features?, https://www.theodo.com/blog/python-3-11-what-are-the-best-new-features

22. Python 3.13: Cool New Features for You to Try, https://testdriven.io/blog/python313/

23. Python Objects: Identity, Type, and Value, https://bitfragment.net/plnotes/py/object-identity/

24. A Beginner's Guide to Python's id, type, and Object Mutability, https://medium.com/@essienisaiah.732/a-beginners-guide-to-python-s-id-type-and-object-mutability-d3d6fc6ef0c9

25. Built-in Types — Python 3.13.2 documentation, https://docs.python.org/3/library/stdtypes.html

26. Variables in Python: Usage and Best Practices, https://realpython.com/python-variables/

27. Python Identity Operators, https://www.youtube.com/watch?v=BG3lg589HRE

28. What’s New in Python, https://docs.python.org/3/whatsnew/index.html

29. What’s New In Python 3.12, https://docs.python.org/3/whatsnew/3.12.html

30. Python 3.13: A Beginner-Friendly Guide to All the Cool New Stuff, https://dev.to/learncomputer/python-313-a-beginner-friendly-guide-to-all-the-cool-new-stuff-3nn1

31. Python 3.13: Cool New Features for You to Try, https://realpython.com/python313-new-features/

32. Pythonスライスの基本的な理解, https://beginner-engineers.com/slice/

33. スライス表記 とは, https://www.cloudeffects.com/programming/python-slice-notation

34. スライス記法のおさらい, https://zenn.dev/hovinci/articles/acf8bb44fda120

35. Pythonのスライスの使い方がわからない, https://www.sejuku.net/blog/44850

36. Pythonのスライスの基本的な使い方, https://note.nkmk.me/python-slice-usage/

37. Python リスト 最新 仕様 3.13 公式ドキュメント, https://docs.python.org/ja/3.13/c-api/list.html

38. Python 3.13で「できるようになったこと」TOP5(初心者向けまとめ), https://programming-mondai.com/python-3-13/

39. Pythonのクラスをわかりやすく解説!, https://saycon.co.jp/archives/neta/python%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E3%82%8F%E3%81%8B%E3%82%8I%E3%81%8F%E8%A7%A3%E8%AA%AC%EF%BC%81%E5%88%9D%E5%BF%83%E8%80%85%E3%81%A7%E3%82%82%E6%8C%AB%E6%8A%98

40. 【Python入門】オブジェクトとは? 初心者でもわかる基本概念と使い方をわかりやすく解説, https://techgym.jp/column/object/

41. Python最新バージョンのインストールガイド, https://fullfront.co.jp/blog/technology-development/python/python-latest-version-installation-guide/

42. よりよいインタラクティブインタプリタ, https://zenn.dev/akasan/articles/423451d2bb8249

43. 改善された対話的インタープリタ, https://docs.python.org/ja/dev/whatsnew/3.13.html

44. 現実世界に存在する「モノ」を模倣した形でプログラムを設計, https://codezine.jp/article/detail/22235

45. 形式的でない Python の紹介, https://docs.python.org/ja/3/tutorial/introduction.html#lists

ーーーーーーーーーーーーーーーーーーーーー2022年7月日執筆ーーーーーーーーーーーーーーーーー

はじめに

 前回のPython入門(9)では、Pythonの関数の定義について学びました。

 Python入門の第十弾として、Pythonのオブジェクトとリストについて紹介します。

  この記事を読むと次の疑問について知ることができます。

 それでは、Pythonのオブジェクトとリストをこれから始めようとする初心者向けに分かりやすく解説していきます。

Pythonのオブジェクトとは?

 Pythonの3.10.4のドキュメントには、次のように書かれています。

Python における オブジェクト (object) とは、データを抽象的に表したものです。Python プログラムにおけるデータは全て、オブジェクトまたはオブジェクト間の関係として表されます。(ある意味では、プログラムコードもまたオブジェクトとして表されます。

 つまり、Pythonで扱うデータ型やプログラムも含めて全てオブジェクト(Object)ということができます。

 具体的には、「20」、「100」のような数値型データは数値型オブジェクトであり、「xyz」、「オブジェクト」のような文字列型データは文字列型オブジェクトであり、その他のPythonで扱うデータ型全てがオブジェクトとなります。

 また、前回紹介した関数なども関数オブジェクトであり、import 文を使ってロードした モジュール (Calendarモジュール)もモジュール型のCalendarオブジェクトとなります。

リストオブジェクト

 「for 文による繰り返し処理」でリストオブジェクトとして、東京都の1週間のコロナ感染者数 [2549, 2194, 1344, 2362, 2415, 2335, 2111]を扱いましたが、このように決まった要素(値)が並んだようなデータ形式をPythonではリスト型データと呼び、リストオブジェクトとなります。

 他のプログラム言語などでは配列などと呼ぶこともありますが、Pythonではリストと呼びます。

リストオブジェクトは、半角の角カッコ 「[」と「]」の間に要素(値)を半角コンマ「,」で区切って並べて作成します。

[要素1,要素2,要素3,‥‥]

 具体的な例を示すと、

 ある日の主要な都道府県(東京都、大阪府、神奈川県、埼玉県、愛知県、北海道)のコロナ感染者数を並べて作成すると、次のようになります。

todoufukens = ['東京都', '大阪府', '神奈川県', '埼玉県', '愛知県', '北海道']
numbers_corona = [2329, 1414, 919, 780, 997, 723]

 「todoufukens」は主要な都道府県の文字列の要素(値)を持ったリストであり、「numbers_corona」はコロナの感染者数の数値型要素(値)を持ったリストとなります。

リストオブジェクトの要素の参照

 リストオブジェクト内の要素をどのようにして参照するかと言うと、リストオブジェクト内のデータにインデックスを付けます。

 リストの最初の要素を0として、順番に番号を振っていきます。

 下図を参照。

インデックス012345
todoufukens東京都大阪府神奈川県埼玉県愛知県北海道
numbers_corona23291414919780997723

 リスト内要素の参照は、次のようになります。

リストオブジェクト名[インデックス]

 したがって、埼玉県と埼玉県のコロナ感染者数を参照する場合は、todoufukens[3]とnumbers_corona[3]となります。

 インデックスの範囲外を指定するとエラーとなりますので注意してください。

 例えば、都道府県(numbers_corona)やコロナ感染者数(numbers_corona)のリストの数は6個であり、最後のインデックスは6-1=5となりますので、numbers_corona[6]、numbers_corona[6]と参照すると「IndexError」となりますので注意してください。

リスト内の要素の操作

 リスト内の要素の操作には、要素の追加、削除、置換などが行えます。

要素の追加

 リストに要素を追加したい場合には、リストのメソッドである insert() を使用します。

 insert()メソッドの構文は次の通り。

リストオズジェクト名.insert(インデックスによる挿入位置, 要素オブジェクト)

 例題として、先の都道府県(numbers_corona)やコロナ感染者数(numbers_corona)のそれぞれのリストのインデックス5の所に沖縄と沖縄のコロナ感染者数(1542)を挿入してみましょう。

要素の置換

 リスト内の要素を置換する場合は、次にようにします。

リストオブジェクト名[置換する要素のインデックス] = 置換する要素

 先ほど挿入した都道府県(numbers_corona)やコロナ感染者数(numbers_corona)の沖縄と沖縄でのコロナ感染者数を福岡県、福岡県のコロナ感染者数(752)に置換してみましょう。

要素の削除

 リストオブジェクト内の要素を削除したい場合は、del 文を用います。

 del 文の構文は次の通り。

del リストオブジェクト名[削除する要素のインデックス]

 例題として、先ほど置換した福岡県と福岡県のコロナ感染者数を削除して見ましょう。

リストの繰り返し処理

 リスト内のデータの総和を求めたい場合などは、リスト内の各要素の値をループで回して一つづつ足してやればよいことになります。

 例えば、前出の主要な都道府県のコロナ感染者数の総和を求める場合は、while文を使う場合は次のようになります。

 また、for 文を使うと次のように簡単になります。

 参考に、さらに簡単に総和を求めるならば、sum関数があります。

おわりに

 如何だったでしょうか?

 Pythonのオブジェクトとは?、リストオブジェクト、リストオブジェクトの要素の参照、リスト内の要素の操作、要素の追加、要素の置換、要素の削除、リストの繰り返し処理などについて解説してきました。

 この記事を読みながらPythonを学んでもらえればと思います。

 次をお楽しみに?

以上です。

 

コメント

タイトルとURLをコピーしました