Pythonのデータモデルをハンズオンで学ぼう!3.1

当サイトではアフィリエイト広告を利用しています。

リファレンス

Pythonを学び始めると、「オブジェクトって何?」「==is の違いは?」「可変と不変ってどう違うの?」といった疑問にぶつかることが多いですよね。

そこで今回は、Pythonのデータモデルの基本 をハンズオン形式で解説します! 実際にコードを書きながら、オブジェクト・値・型の概念をしっかり理解していきましょう。


🎯 このハンズオンの目標

  • Pythonの オブジェクト とは何かを理解する
  • の違いを学ぶ
  • 可変(mutable)不変(immutable) を体験する
  • ==(値の比較)と is(オブジェクトの比較)の違いを知る
  • オブジェクトの寿命とガベージコレクション を理解する

それでは、さっそく始めましょう! 🚀


1️⃣ Pythonのオブジェクトとは?

Pythonでは、すべてのデータが「オブジェクト」 です。数値、文字列、リスト… すべてがオブジェクトとして扱われます。

🏋️‍♂️ ハンズオン 1: id() を使ってオブジェクトを確認しよう

Pythonの各オブジェクトには、ID(メモリアドレス) が割り当てられています。
id() を使うと、そのオブジェクトのIDを取得できます。

a = 10
b = 10
print(id(a))  # a のID
print(id(b))  # b のID

💡 質問:

  • ab のIDは同じになるでしょうか?
  • Python は 小さな整数(-5 から 256)をキャッシュ するため、同じオブジェクトを参照する可能性があります。

2️⃣ 値と型

オブジェクトには、値(value)型(type) があります。
type() を使うと、オブジェクトの型を確認できます。

🏋️‍♂️ ハンズオン 2: type() を使って型を確認しよう

次のコードを実行してみましょう。

x = 42
y = 3.14
z = "Hello"
w = [1, 2, 3]

print(type(x))  # int(整数型)
print(type(y))  # float(浮動小数点型)
print(type(z))  # str(文字列型)
print(type(w))  # list(リスト型)

💡 質問:

  • x = 42.0 に変更すると、型はどう変わるでしょうか?

3️⃣ 可変(mutable)と不変(immutable)

Pythonのオブジェクトは、変更できるもの(可変)変更できないもの(不変) に分類されます。

可変性
int ❌ 不変
float ❌ 不変
str ❌ 不変
list ✅ 可変
tuple ❌ 不変
dict ✅ 可変

🏋️‍♂️ ハンズオン 3: 不変オブジェクトと可変オブジェクトの違い

# リスト(可変)
numbers = [1, 2, 3]
print(id(numbers))  # 変更前のID
numbers.append(4)
print(numbers)
print(id(numbers))  # IDは変わらない(同じリストを変更)

# 文字列(不変)
text = "Hello"
print(id(text))  # 変更前のID
text += " World"
print(text)
print(id(text))  # IDが変わる(新しいオブジェクトが作られる)

💡 質問:

  • numbers.append(4) では id(numbers) が変わらなかったのに、text += " World" では id(text) が変わったのはなぜでしょう?

4️⃣ == と is の違い

Pythonでは、オブジェクトを比較する方法が2つ あります。

  • == が同じかどうかを比較
  • isID(オブジェクトそのもの) が同じかどうかを比較

🏋️‍♂️ ハンズオン 4: ==is の違い

a = [1, 2, 3]
b = [1, 2, 3]
c = a

print(a == b)  # True(値が同じ)
print(a is b)  # False(異なるオブジェクト)
print(a is c)  # True(同じオブジェクト)

💡 質問:

  • b = [1, 2, 3] の場合、a is bFalse になる理由は?

5️⃣ オブジェクトの寿命とガベージコレクション

Pythonは ガベージコレクション(GC) を使って、不要になったオブジェクトを自動的に削除します。
オブジェクトの 参照カウントsys.getrefcount() で調べることができます。

🏋️‍♂️ ハンズオン 5: 参照カウントを確認しよう

import sys

x = [1, 2, 3]
print(sys.getrefcount(x))  # x の参照カウントを表示

y = x  # x を y に代入(参照カウントが増える)
print(sys.getrefcount(x))  # 参照カウントが増えたか確認

💡 質問:

  • y = x をすると sys.getrefcount(x) はどう変わるでしょうか?

📌 まとめ

今回のハンズオンで学んだことを振り返りましょう!

オブジェクト には id() で一意の識別子がある
type() を使うとオブジェクトの型がわかる
可変listdict)と 不変intstr)の違いを理解した
==値の比較isオブジェクトの比較 である
ガベージコレクション の仕組みと参照カウントの概念を学んだ

Pythonを深く理解するには、データモデルの仕組み を知ることがとても重要です。
ぜひ、今回の内容を応用して クラスやカスタムオブジェクト についても学んでみてくださいね!

📌 次のステップ: クラスとオブジェクト指向プログラミングを学ぼう! 🚀