2016-08-24 17 views
-1

多くのことが、Pythonのパスバイオブジェクトリファレンスについて書かれています。しかし、thisthisのようなスレッドを読むのは混乱します。それらのスレッドでオブジェクトの参照と変更可能性

は、いくつかは他の人が可変または不変オブジェクトが同じように扱われていることを言っている間可変性は、重要であると言います。私は素朴な疑問を持っている

は、なぜaの内容は、コードの最初のスニペットに変更され、第二には変更されませんか?オブジェクト参照渡しのthis explanationによれば、両方の場合において参照の内容を変更すべきではないか?

def fn(b): 
    b += 1 
a = 2 
fn(a) 
print(a) 

def fn(b): 
    b += [4] 
a = [2] 
fn(a) 
print(a) 
+0

記事(スレッドではなく、SOフォーラムではありません)あなたは情報の膨大な量を含むようにリンクします。私たちにそれらを転載するように求めるのではなく、利用可能な回答を読んでください。 – TigerhawkT3

+0

技術的には、Pythonは「[call by sharing](https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing)」を使用しています。また、混乱は本当にPython変数の根本的な誤解に由来しています。 Pythonの変数は、オブジェクトに配置する名前タグのようなものです。関数に引数を渡すときには、その引数に与えられた名前タグをそのオブジェクトに置きます。 –

答えて

0

は、参照の内容は、両方の場合において修飾されるべきではありませんか?

いいえ、intのオブジェクトは不変です。

あなたも、これを実証するための機能を必要としません。

は、次のことを考えてみましょう:

a = 1 
print(id(a)) 
a += 1 
print(id(a)) 
>> 496418832 
    496418848 

我々は明らかに新しいオブジェクトを取得しています。

は、と比較:

a = [1] 
print(id(a)) 
a += [2] 
print(id(a)) 
>> 36641608 
    36641608 

aはまだこの場合、同じオブジェクトを参照しています。

+0

あなたの「id」の使い方は、私のために本当に明確になったものです。ありがとう! –

関連する問題