通値はPythonの[複製]
-
22-08-2019 - |
質問
この質問に答えはこちら
- どうしていただくために変数による。 26回答
き集のようなリスト、配列を他の機能はpythonのなのでコピーを作成し、それともただのポインター?
解決
のPython 値に参照によりツーオブジェクトを渡します。
Pythonは参照・ツー・オブジェクトによってを通過します 値(Javaのような)、およびすべてで Pythonはオブジェクトです。これが聞こえます シンプルな、しかし、あなたはそれに気づくでしょう 一部のデータ型が発揮するように見えます パスによって値特性、しばらく 他の人がのように振る舞うように見えます 参照渡し...契約は何でしょうか。
可変理解することが重要です そして不変オブジェクト。いくつかのオブジェクト、 文字列、タプル、および数字のように、あります 不変。内部でそれらを変更します 関数/メソッドは、新しいを作成します。 インスタンスと元のインスタンス 関数外/方法はありません かわった。リストのような他の目的、 そして、辞書は、変更可能です あなたがオブジェクトを変更できることを意味します 所定の位置に。そのため、変更 関数/メソッドの意志の内部オブジェクト また、元のオブジェクトを変更します 外ます。
他のヒント
もので、参考値概念がない場合エラーになります。Pythonではない"価値"に変更します。Pythonにはオブジェクトだけで、名前を参照するオブジェクト。
なんとなく通話機能や、"名前"の中の括弧のように、この:
def func(x): # defines a function that takes an argument
... # do something here
func(myname) # calling the function
実際のオブジェクト myname
が差しが渡され、 名称 myname
そのもの.内部の機能 別名 (x
対参照が同じオブジェクトを渡されます。
を修正することができますオブジェクト内の機能であれば変更可能なものにす 変更することができませんの外に名を指.だけで同じことがい
anothername = myname
そこで、上記のようなのでお答え:
それが"通価値"が全ての値も参照オブジェクト。
答えがここで役に立ったものだから、その必要性を示す区別するか、あるい証明をもってその後のCL実験
- 変更不能なオブジェクトのみの変更はできません以内に機能します。 (答えているとか...)
- ものの、変更不能なオブジェクトの内容は変更可能なオブジェクトを再割り当てメソッド内でます。
'num'が変わりませんのでこのことを不変数オブジェクト[サマ1.]:
def incr_num(num):
num += 1
num = 0
num
0
incr_num(num)
num
0
リスト[0]'ここでは変数オブジェクト。
def incr_list(list):
list[0] += 1
list = [0]
list[0]
0
incr_list(list)
list[0]
1
定できるようになりましたかったのが'list[0]'、変数オブジェクトの変更支援は私のポイント2.) ながら、上記の例では多くのオブジェクト'num'かったのか。 の変数オブジェクトのリスト[0]'が含まれる、変更可能なリストオブジェクトが'list'、'num'から第1回の例では非contianed数オブジェクトです。
がどの意思 @スティーブンパプ トップ●定格回答されています)、その他の類似のではない全く正しい(この思いから、書くことで解答):
一部のオブジェのように、文字列、タプルで、数は不変です。変更を行なえる機能-手法を新しいインスタンス 元のインスタンス以外の方法で変更されません。
私の第2のコード実験上記の番号を示してオブジェクト(リスト[0]かにされている変更内の方法では、元のインスタンス以外の機能を変更します。
参照が渡されるが、パラメータは不変オブジェクトである場合、メソッド内でそれを変更すると、新しいインスタンスが作成されます。
オブジェクトが渡されます。コピーではありませんが、基礎となるオブジェクトへの参照。
私はまたcopy
モジュールを見てお勧めします:
参照により
>>> x = [0,1,2,3]
>>> def foo(x_list):
x_list[0] = 1
>>> foo(x)
>>> x
[1, 1, 2, 3]
私は謙虚な例をあげさせてください。
def swap(a, b):
x = a
print id(x)
print id(a)
print id(b)
a = b
print id(a)
b = x
print id(b)
a[0]= '20'
var1 = ['1','2','3','4']
var2 = ['5','6','7','8','9']
print id(var1)
print id(var2)
swap(var1, var2)
print id(var1)
print id(var2)
print var1
print var2
次の結果を生成する
28329344 VAR1 28331264 VAR2 28329344 X 28329344 A 28331264 B = bの後 28331264 A B = xの後 28329344 B 復帰後 28329344 VAR1 28331264 VAR2 [ '1'、 '2'、 '3'、 '4'] [ '20'、 '6'、 '7'、 '8'、 '9']
メモリアドレスへのマッピング 28329344 28331264 VAR1 VAR2 B バツ = bの後 A bの後= X B [0] = '20' の後 [0] = '20' 復帰後 [ '1'、 '2'、 '3'、 '4'] [ '20'、 '6'、 '7'、 '8'、 '9']