8

Python では、関数への引数は値渡しモデルを使用して渡されると多くの人が言います。私が理解しているように、それは実際には値による呼び出し言語ではなく、オブジェクトによる呼び出しまたは共有による呼び出しモデルです。

値による呼び出しモデルとオブジェクトによる呼び出しモデルの違いは何ですか? これらのモデルがどのように異なるかを示す Python の例は何ですか?

4

2 に答える 2

12

Python の変数は値ではなく、オブジェクト参照です。Python 関数を呼び出す場合、引数は元のオブジェクトへの参照のコピーです。これがあなたが質問で提起した用語とどのように関連しているかわかりません。

たとえば、次の Python コードを考えてみましょう。

def foo(bar, baz):
    bar = 3
    baz[0] = 4

a = 1
b = [2]
foo(a, b)
print a, b

aオブジェクトに割り当てられ、オブジェクト1bの参照を含むリスト オブジェクトに割り当てられます2。関数内では、foobar同じオブジェクト1baz割り当てられ、同じリスト オブジェクトに割り当てられます。は不変であるため1、オブジェクトを変更することはできませんが、barなどの別のオブジェクトを参照するように再割り当てできます3。リストは変更可能であるため、 に設定baz[0]すると、参照する4リスト オブジェクトも変更されますb。上記の出力は になります1 [4]

于 2012-06-01T03:41:27.523 に答える