0
def func(x):
    print "inside function" ,id(x)
    x = 2
x = 50
print "outside function" ,id(x)
print 'Value of x before function call is', x
func(x)
print 'Value of x after function call is', x

出力:

outside function 6486996
Value of x before function call is 50
inside function 6486996
Value of x after function call is 50

id()それがオブジェクトのメモリ位置を与えると仮定します。どちらも同じ場所に保存していますが、 で x の値を変更しfunc()ても外部には影響しません。

4

3 に答える 3

3

ああ、でも関数内のid(x)呼び出しは関数に渡されたグローバル x を参照しx = 2ますが、新しいローカル x を作成します。これを試して:

def func(x):
    print "inside function", id(x)
    x = 2
    print "still inside function", id(x)

x = 50
print "outside function" , id(x)
print 'Value of x before function call is', x
func(x)
print 'Value of x after function call is', x

典型的な出力

outside function 168950596
Value of x before function call is 50
inside function 168950596
still inside function 168951172
Value of x after function call is 50
于 2015-01-03T10:09:18.313 に答える
0

それについてもっと知りたい場合は、基本的な python を完全に理解する必要があると思います。

あなたの質問についてのポイント:

パラメータとして可変オブジェクト

関数はそのオブジェクトへの参照を取得し、それを変更できますが、メソッドで参照を再バインドすると、外側のスコープは何も知らず、実行後も外側の参照は元のオブジェクトを指します。

パラメータとしての不変オブジェクト

外部参照を再バインドすることはまだできず、このオブジェクトを変更することさえできません。

コメントの更新: x(Integer immutable) を関数呼び出しに渡すと、このオブジェクトを変更できません。関数内で x 参照を再バインドすると、外側のスコープは何もわかりません。完了後も、外側の参照は元の整数 50 オブジェクトを指します。

于 2015-01-03T10:27:51.767 に答える