2017-06-30 11 views
0

整数が不変であることが分かっているので、2の代わりに4を印刷するにはどうすればいいですか?Pythonの不変オブジェクトを変更する方法は?

a = 2 
def add(num): 
    num = 4 
print(a)  
+0

このコード例では何が起こっているのか説明できますか?あなたの最後のゲームは何ですか? – Will

+2

整数そのものが不変であるため、別の整数参照を 'a'に代入することを止めません。それはあなたが求めていることですか?それは非常に明確ではない、あなたの質問は詳細が欠けている。 –

+1

'return num'を' add'メソッドに追加します – davedwards

答えて

0

これはあなたが達成しようとしているものであるように思える:

a = 2 
def add(): 
    global a 
    a = 4 

add() 
print(a) 

add()関数は4にの値を変更し、出力は、Python 4.

0

、変数になります値を保持するだけのバスケットです。 aに別の値を保持したい場合は、それを単純に入れてください。整数2は不変であるが

a = 2 # value 
a = 3 # new value 

は、aその整数に単にオブジェクト参照です。 a自体(オブジェクト参照)は、任意のオブジェクトをいつでも参照できるように変更することができます。

あなたが発見したように、あなたは、単に関数に変数を渡すと、その値を変更することはできませんが:

def f(a): 
    a = 4 
f(a) 
print(a) # still 3 

なぜまだ3? Pythonのオブジェクトは*オブジェクト参照*によって渡されるからです。これは値でも同じでもなく、他の言語でも同じではありません。

関数内のaは、関数の外部とは異なるオブジェクト参照です。それは別の名前空間です。関数aがもう一方(最終a)になるように関数を変更する場合は、これを明示的に指定する必要があります。

def f(): 
    global a # this makes any following references to a refer to the global namespace 
    a = 4 
f() 
print (a) # 4 

さらに読むためにthis linkを強くお勧めします。

+0

または可変型を処理します:L [3] '' f(L) '' print(L [0]) ' - 少し複雑ですが、まともなものとして機能します例。 – Baldrickk

関連する問題