#author("2025-05-09T14:00:45+09:00","","")
#author("2025-05-15T12:32:26+09:00","","")
[[FrontPage]]~

*ローカル変数とグローバル変数 [#i8bbbbbf]

ローカル変数:関数内で定義される変数。関数外からはアクセスできない。~
例~
#code(py){{
def main():
    b = 20  # ローカル変数
    print(b)
main()
# print(b)  # エラー:bは関数外で未定義
}}

グローバル変数:プログラム全体でアクセス可能な変数。~
ただし、関数内でグローバル変数を「置き換える」とローカル変数として扱われる。~
例
#code(py){{
a = 10  # グローバル変数
def func():
    a = 20  # ローカル変数として扱われる
    print(a)  # 20
func()
print(a)  # 10(グローバル変数は変わらない)
}}

解決策:グローバル変数を関数内で編集する場合は、リストや辞書のような~
「ミュータブルなオブジェクト」を使うか、コールバック関数のパラメータ(param)で渡す。~
例~
#code(py){{
info = [False, -1, -1]  # ミュータブルなリスト
def mouseEvent(event, x, y, flags, param):
    info[0] = True  # グローバルなリストを編集
cv2.setMouseCallback("nuko", mouseEvent, info)
}}

 グローバル変数は「誰が参照・変更しているか」追跡しづらいため、極力避ける。

*リストとミュータブル・イミュータブル [#iae47f35]
リスト:Pythonのリストは複数の要素を保持するデータ構造。例:a = [10, 20, 30]~
*ミュータブル・イミュータブル [#iae47f35]
ここでリスト:Pythonのリストは複数の要素を保持するデータ構造である。例:a = [10, 20, 30]~

ミュータブル:リストや辞書は「変更可能」。内容を編集しても同じオブジェクトのまま。~
例
#code(py){{
a = [10]
def func():
    a[0] = 4  # リストの内容を変更
func()
print(a)  # [4]
}}

イミュータブル:整数、文字列、タプルなどは「変更不可」。新しいオブジェクトが作成される。~
例
#code(py){{
a = 10
def func():
    a = 20  # 新しいローカル変数aを作成
func()
print(a)  # 10(グローバル変数は変化しない)
}}

 ミュータブルなオブジェクトは「ポインタのような振る舞い」をする。これを理解することで、意図しない変数変更を防げる。
 イミュータブルなオブジェクト(例:タプル)は安全だが、変更が必要な場合はリストや辞書を選ぶ。

*ガベージコレクション(GC) [#k077e751]
ガベージコレクション:Pythonが自動で不要になったメモリを解放する仕組み。~
これはオブジェクトが「参照されなくなった」時点で、GCがメモリを解放するということ。~

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS