Pythonの基本データ型と可変/不変オブジェクトの解説

Pythonの基本データ型

Pythonには6つの標準データ型が存在します:

  • 数値型(整数、浮動小数点数、複素数、ブール型)
  • 文字列型
  • リスト型
  • タプル型
  • セット型
  • 辞書型

可変性による分類

これらのデータ型は可変性によって以下のように分類されます:

  • 不変データ型:数値型、文字列型、タプル型
  • 可変データ型:リスト型、辞書型、セット型

Pythonの型システム

Pythonは動的型付けかつ強力な型システムを持つ言語です:

  • 型チェックが実行時に行われる
  • 暗黙的な型変換が発生しない

可変/不変オブジェクトの挙動例

以下のコードで可変オブジェクトと不変オブジェクトの違いを確認できます:

def modify_list(lst):
    lst.append(100)
    
def modify_number(num):
    num += 10
    
sample_list = [1, 2, 3]
sample_num = 5

modify_list(sample_list)
modify_number(sample_num)

print(sample_list)  # [1, 2, 3, 100]
print(sample_num)   # 5

デフォルト引数の注意点

可変オブジェクトをデフォルト引数に使用する場合の挙動:

def accumulate_values(values=[]):
    values.append(1)
    return values
    
print(accumulate_values())  # [1]
print(accumulate_values())  # [1, 1]
print(accumulate_values())  # [1, 1, 1]

Pythonの引数渡し

Pythonの引数渡しは「オブジェクト参照渡し」と呼ばれます:

  • 可変オブジェクトの場合、元のオブジェクトが変更される
  • 不変オブジェクトの場合、新しいオブジェクトが作成される
def demonstrate_reference(obj):
    print(f"関数内初期ID: {id(obj)}")
    if isinstance(obj, list):
        obj.append(10)
    else:
        obj += 10
    print(f"変更後ID: {id(obj)}")
    print(f"変更後値: {obj}")

list_obj = [1, 2]
num_obj = 5

demonstrate_reference(list_obj)
demonstrate_reference(num_obj)

print(f"最終リスト: {list_obj}")  # [1, 2, 10]
print(f"最終数値: {num_obj}")     # 5

タグ: Python データ型 可変オブジェクト 不変オブジェクト 引数渡し

6月29日 20:31 投稿