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